2010-02-22 6 views
3

J'ai une application Qt que je compile en version configuration, exécutez, puis effectuez l'opération X dans le programme. Tout fonctionne bien.Visual Studio C++ exception ... weirdness

Je compilez puis dans configuration débogage, exécutez sans débogage (si CTRL + F5), effectuer une opération X dans le programme. Tout encore fonctionne dandy bien.

Mais quand je tente d'exécuter la configuration de débogage avec le débogage (donc juste F5) puis effectuer une opération X, les pauses Visual Studio avec un message qu'une exception a été jeté ... dans un sans aucun rapport partie du programme (le code en cours d'exécution est loin du site où VS se casse, dans le template QHash) ... puis VS se bloque et je dois le tuer avec le Gestionnaire des tâches. Je peux répéter cette annonce à l'infini, et ça flippe toujours de la même façon. Boost :: exception est utilisé pour les exceptions.

VS est 2008, SP1. Qt est 4.6.2, en utilisant les binaires VS précompilés du site Qt.

Quelqu'un a-t-il une idée de ce qui se passe?

+3

Vous n'auriez pas la possibilité de gérer les exceptions de première chance, n'est-ce pas? (Déboguer -> Exceptions, voir si les cases à cocher sont cochées). –

+0

Um ... oui. "Exceptions C++" est cochée. Supprimer les vérifications résout le problème. Mais je ne me souviens pas d'avoir mis ces vérifications. Quoi qu'il en soit, votre solution fonctionne et maintenant je me sens comme un crétin. Si vous faites une réponse à votre commentaire, je le marquerai comme accepté. – Lucas

+0

Mais toujours ... il n'y a pas d'exception levée dans le code en cours d'exécution (pas de code que _could_ jette non plus). – Lucas

Répondre

4

Visual Studio dispose d'une fonctionnalité appelée «gestion des exceptions de première chance» dans laquelle, lors de l'exécution du programme de débogage, le débogueur peut être interrompu lorsque des exceptions de certains types sont levées.

Vous pouvez modifier ces paramètres en accédant à Debug -> Exceptions (Ctrl + Alt + E) et en cochant (case non cochée) les cases appropriées. Quand il casse, vous devriez obtenir un message dans la fenêtre de sortie indiquant quelle exception a été levée. Si _HAS_ITERATOR_DEBUGGING est activé (il est activé par défaut dans les versions de débogage), de nombreuses erreurs d'itérateur peuvent provoquer des exceptions au lieu d'effectuer des opérations qui entraîneraient des violations d'accès. C'est la seule chose à laquelle je peux penser du haut de ma tête qui provoquerait une exception "au hasard".