2010-08-05 6 views
7

Wenn ich eine ausführbare Datei ausführe, die eine Ausnahme (eingebautes Debug) auslöst, erhalte ich ein Fehlerdialogfeld, das etwas wie "Debug Assertion failed" und dann einige Informationen über die Ausnahme sagt. Während dies geschieht, wird die Ausführung des Programms ausgesetzt, bis ich eine der Optionen "Abbrechen", "Wiederholen" oder "Ignorieren" auswähle.Wie kann ich "Microsoft Visual C++ Debug Library" -Dialoge deaktivieren?

Die Sache ist, ich viele Anwendungen von einem Skript ausführen, und wenn einer von ihnen eine Ausnahme auslöst, wird mein Skript angehalten, bis es behandelt wird.

Gibt es eine Möglichkeit, diesen Ausnahmebehandlungsmechanismus zu deaktivieren?

EDIT: Ich erinnere mich an das Lesen über einen Registrierungsschlüssel, vor einer Weile, die die Fehlermeldung deaktivieren würde erscheinen. Weiß jemand davon?

Antwort

1

Können Sie Ihre ausführbaren Dateien als Release erstellen? Wenn ich mich erinnere, sollte das das Auftreten der Assertionsfehler verhindern.

+0

Auch wenn sie meine Anwendungen sind, kann ich sie nicht in Release bauen. – Geo

+0

@Geo: Wenn Sie die Anwendung selbst nicht ändern können, besteht eine Möglichkeit darin, ein kleines Programm zu schreiben, das periodisch nach dem Vorhandensein dieses Fensters sucht und den Schlüsselstrich 'I' an es sendet. Ich mache es selbst so und es hilft sehr. – Naveen

+0

Gibt es keinen Registrierungsschlüssel, den wir ändern könnten, um einen ähnlichen Effekt zu erzielen? – Geo

4

Wenn Sie die Quelle der Anwendung ändern kann (s), haben einen Blick auf die _CrtSetReportMode Funktion, zB:

_CrtSetReportMode(_CRT_ASSERT, 0); 

Siehe msdn für mehr.

2

Wenn Sie die Quelle ändern können, muss das Abbruchverhalten (durch assert aufgerufen) geändert werden, um den Dialog abort/retry/ignore zu unterdrücken.

Beim Abbrechen wird immer noch ein Crashdump erzeugt (standardmäßig), damit Sie nicht verlieren, was wichtig ist.

Zusätzlich können Sie das assert-Verhalten anpassen, um nur an stderr zu schreiben. Dies ist NICHT erforderlich, wenn das Abbruchverhalten für das geeignet ist, was Sie wollen. Hinweis: Die _Crtxxx-Aufrufe sind nur in Debug-Builds (/ Zi) aktiv.

Eine minimale Änderung, um den Abbruch/Wiederholen/Ignorieren zu deaktivieren. Entwerten Sie die _Crt-Aufrufe und fügen Sie crtdbg.h hinzu, um das Assert-Verhalten auch im Debug-Modus zu ändern.

#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

Verwandte Themen