2010-04-24 10 views
8

Wie richte ich gdb auf Fenster, so dass ein Programm mit Assertion Fehler nicht beendet werden kann? Ich beabsichtige, die Stack-Trace und Variablen im Programm zu überprüfen.Debuggen von MinGW-Programm mit gdb unter Windows, nicht bei Assert-Fehler zu beenden

Zum Beispiel läuft dieses test.cpp Programm kompiliert mit MinGW 'g++ -g test.cpp -o test' in GDB:

#include <cassert> 
int main(int argc, char ** argv) { assert(1==2); return 0; } 

Gibt:

$ gdb test.exe 
GNU gdb 6.8 
Copyright (C) 2008 Free Software Foundation, Inc. 
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> 
This is free software: you are free to change and redistribute it. 
There is NO WARRANTY, to the extent permitted by law. Type "show copying" 
and "show warranty" for details. 
This GDB was configured as "i686-pc-mingw32"... 
(gdb) r 
Starting program: f:\code/test.exe 
[New thread 4616.0x1200] 
Error: dll starting at 0x77030000 not found. 
Error: dll starting at 0x75f80000 not found. 
Error: dll starting at 0x77030000 not found. 
Error: dll starting at 0x76f30000 not found. 
Assertion failed: 1==2, file test.cpp, line 2 

This application has requested the Runtime to terminate it in an unusual way. 
Please contact the application's support team for more information. 

Program exited with code 03. 
(gdb) 

Ich mag wäre in der Lage sein, um das Programm zu stoppen Beenden sofort, wie Visual Studio Debugger und gdb unter Linux tut es. Ich habe eine Suche durchgeführt und einige Sachen über Trapping-Signale gefunden, aber ich finde keinen guten Beitrag darüber, wie ich gdb dafür einrichten kann.

Antwort

5

Setzen Sie einfach einen Haltepunkt an der Ausfahrt:

(gdb) b exit

+0

Wie kann ich aufhören zu fragen: Funktion "Exit" nicht in geladenen Symbolen definiert. Den Breakpoint für die zukünftige Belastung der gemeinsam genutzten Bibliothek ausstehend machen? (y oder [n]) y Haltepunkt 1 (Ausgang) steht an. – devil

6

Fand heraus, dass der Haltepunkt mit den Linien in der .gdbinit Datei gesetzt werden:

set breakpoint pending on 
b exit 

Dadurch wird die Notwendigkeit beseitigt eingeben ja für Windows.

1

letzten Verwendung (März 2017) msys2 mit gcc 6.3 und GDB 7.12.1 Sie verwenden sollten:

break _exit 

heißt verwenden _exit und nicht exit. Ich erwarte, dass dies auch in anderen Fällen funktioniert, da ich erwarte, dass _exit aufruft, um tatsächlich zu beenden.