Question

Je l'ai récemment mis en place une gestion des exceptions vectorisées pour détecter les erreurs dans notre logiciel. Ceci est particulièrement utile comme nous venons de converti VC6 à VS2005. Nous rencontrer quelques problèmes avec l'utilisation de la bibliothèque STL (généralement des gens qui font des choses qu'ils ne devraient pas). Je suis en train de rattraper ces erreurs avec mon Vectored gestionnaire d'exceptions.

Toutefois, cela ne semble pas obtenir appelé, au lieu de ces erreurs sont traitées en interne par le Visual Studio Microsoft bibliothèque C Runtime.

Ma question est;

Y at-il un moyen de désactiver la vérification des erreurs d'exécution et obtenir les exceptions transmises au gestionnaire VE?

Merci Rich

Était-ce utile?

La solution

http://msdn.microsoft.com /en-us/library/aa985973%28VS.80%29.aspx

#define _SECURE_SCL 1
#define _SECURE_SCL_THROWS 1

me ci-dessus permet de lever des exceptions.

Autres conseils

Vous pouvez désactiver les contrôles d'exécution supplémentaires. Cependant, toutes les erreurs entraîneront cette attrape dans un accident que vous pouvez intercepter.

Sur sidenote: Ces contrôles consomment souvent des performances importantes et sont, par défaut, pas désactivée dans la version construit.

#define _SECURE_SCL 0

Il est préférable de le faire via les paramètres du projet, que vous pourriez obtenir vilains problèmes de liaison si le réglage est différent à l'intérieur ou entre les fichiers.

Je suis tombé sur ce problème il y a un moment et il m'a fallu un certain temps pour envelopper ma tête autour de ce qu'ils font dans leur exécution. Je recommande la lecture "Migration à partir de versions antérieures de Visual C ++" sur MSDN au moins deux fois. Ensuite, lisez "Extensions à la bibliothèque C, Partie I: interfaces Bounds-contrôle (ISO / IEC TR 24731-1) " . Ce dernier est le standard que la plupart des paramètres de vérification des choses est basé sur.

Une fois que vous comprenez ce qu'ils font, il suffit de définir _CRT_SECURE_NO_DEPRECATE, _SECURE_SCL et _SECURE_SCL_THROWS dans les paramètres du projet. Ensuite, assurez-vous que vous avez "Activer les exceptions C" réglé sur "Oui avec des exceptions SEH (/ EHA)" et "Contrôles de base d'exécution" mis à "Par défaut" dans votre projet. Au moins, c'est ce qui fonctionne pour nous en ce moment. Il a fallu un certain temps pour supprimer le code incorrect que nous avions créé sous VC6 cependant.

La chose la plus importante que vous pouvez faire est mis de côté quelques semaines et vraiment creuser dans ce que les différentes options et macros font. Ensuite, trouver ce qui fonctionne avec votre code. Nous ne faisons pas assez tôt et il a beaucoup de mal une fois que nous avons eu quelques « mauvais Builds » faire de l'ingénierie.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top