2010-04-24 6 views
8

Comment puis-je configurer gdb dans la fenêtre afin qu'elle ne permet pas un programme avec échec d'assertion de mettre fin? J'ai l'intention de vérifier la trace de la pile et les variables dans le programme.programme MinGW avec Debugging gdb sous Windows, ne pas mettre fin à l'échec assert

Par exemple, l'exécution de ce programme test.cpp compilé avec MinGW 'g++ -g test.cpp -o test' dans gdb:

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

donne:

$ 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) 

Je voudrais être en mesure d'arrêter le programme de mettre fin à immédiatement, comme le fait le débogueur de Visual Studio et gdb sous Linux. J'ai fait une recherche et trouvé des trucs sur les pièges, mais je n'arrive pas à trouver un bon article sur comment configurer gdb pour faire ça.

Répondre

5

Il suffit de définir un point d'arrêt à la sortie:

(gdb) b exit

+0

comment puis-je arrêter de se poser des questions sur: Fonction « exit » ne définit pas les symboles chargés. Mettre en attente le point d'arrêt sur la future charge de bibliothèque partagée? (Y ou [n]) y point d'arrêt 1 (sortie) en attente. – devil

6

Trouvé que le point d'arrêt peut être mis dans le fichier .gdbinit avec les lignes:

set breakpoint pending on 
b exit 

Cela supprime la nécessité d'entrer oui Pour les fenêtres.

1

L'utilisation récente (Mars 2017) msys2 avec gcc 6.3 et gdb 7.12.1 vous devez utiliser:

break _exit 

à savoir utiliser _exit et non exit. Je pense cela aussi de travailler dans d'autres cas, comme je l'attends à ce que exit appellera _exit pour sortir réellement.

Questions connexes