2010-04-24 13 views
8

¿Cómo configuro gdb en la ventana para que no permita que un programa con falla de aserción termine? Tengo la intención de verificar el seguimiento de la pila y las variables en el programa.Depuración del programa MinGW con gdb en Windows, no termina en la falla de afirmación

Por ejemplo, la ejecución de este programa test.cpp compilado con MinGW 'g++ -g test.cpp -o test' en GDB:

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

Da:

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

Me gustaría ser capaz de detener el programa de terminación de inmediato, como lo hace el depurador de Visual Studio y gdb en Linux. Hice una búsqueda y encontré algunas cosas sobre las señales de captura, pero parece que no puedo encontrar una buena publicación sobre cómo configurar gdb para hacer esto.

Respuesta

5

acaba de establecer un punto de interrupción en la salida:

(gdb) b exit

+0

cómo puedo evitar que pregunte sobre: ​​ La función "salir" no está definida en los símbolos cargados. ¿Desea que el punto de interrupción esté pendiente en la futura carga de la biblioteca compartida? (y o [n]) y Punto de interrupción 1 (salida) pendiente. – devil

6

dimos cuenta de que el punto de interrupción se puede poner en el archivo .gdbinit con las líneas:

set breakpoint pending on 
b exit 

Esto elimina la necesidad de entrar en sí para ventanas.

1

El uso reciente (marzo de 2017) msys2 con gcc 6.3 y 7.12.1 GDB se debe utilizar:

break _exit 

es decir, usar _exit y no exit. Espero que esto también funcione en otros casos, ya que espero que exit llame al _exit para salir realmente.

Cuestiones relacionadas