2010-08-05 5 views
7

Si j'exécute un exécutable qui déclenche une exception (intégrée au débogage), une boîte de dialogue d'erreur s'affiche, indiquant quelque chose comme "Échec de l'assertion de débogage", puis des informations sur l'exception. Pendant ce temps, l'exécution du programme est suspendue, jusqu'à ce que je choisisse l'une des options "Abandonner", "Réessayer" ou "Ignorer". En fait, je lance beaucoup d'applications à partir d'un script, et si l'une d'elles lance une exception, elle interrompt mon script jusqu'à ce qu'il soit géré.Comment désactiver les dialogues d'exception "Microsoft Visual C++ Debug Library"?

Est-il possible de désactiver ce mécanisme de gestion des exceptions?

EDIT: Je me souviens d'avoir lu à propos d'une clé de registre, il y a quelque temps, qui empêcherait les messages d'erreur d'apparaître. Est-ce que quelqu'un le sait?

Répondre

1

Pouvez-vous créer vos exécutables en tant que version? Si je me souviens, cela devrait empêcher les erreurs d'affirmation d'apparaître.

+0

Même si ce sont mes applications, je ne peux pas les construire dans la version. – Geo

+0

@Geo: Si vous ne pouvez pas modifier l'application elle-même, alors une option consiste à écrire un petit programme qui vérifie périodiquement la présence de cette fenêtre et lui envoie le trait de touche "I". Je le fais moi-même comme ça et ça aide beaucoup. – Naveen

+0

N'existe-t-il pas une clé de registre que nous pourrions modifier pour obtenir l'effet similaire? – Geo

4

Si vous pouvez modifier la source de l'application (s), un coup d'oeil à la fonction _CrtSetReportMode, par exemple:

_CrtSetReportMode(_CRT_ASSERT, 0); 

Voir msdn pour plus.

2

Si vous pouvez modifier la source, le comportement d'abandon (appelé par assert) doit être modifié pour supprimer la boîte de dialogue abort/retry/ignore. En cas d'abandon, un crashdump sera toujours produit (par défaut) afin de ne pas perdre ce qui est important.

En outre, vous pouvez ajuster le comportement d'assertion pour écrire uniquement dans stderr. Ce n'est pas nécessaire si le comportement d'abandon est adéquat pour ce que vous voulez. Remarque: les appels _Crtxxx ne sont actifs que dans les versions de débogage (/ Zi).

Une modification minimale pour désactiver l'abandon/réessayer/ignorer. Décommentez les appels _Crt et incluez crtdbg.h pour modifier également le comportement d'assertion dans les versions en mode débogage.

#include <stdlib.h> 
//#include <crtdbg.h> 
int main(int argc,char **argv); 
int main(int argc,char **argv) 
{ 
    // ON assert, write to stderr. 
    //_CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE); 
    //_CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR); 

    // Suppress the abort message 
    _set_abort_behavior(0, _WRITE_ABORT_MSG); 

    abort(); 
    return 0; 
} 

msdn assert mode