2012-03-12 12 views
17

Estoy depurando un programa usando gdb. Primero I load mi ejecutable, luego I continue para ejecutar el programa. A veces quiero interrumpir la ejecución de mi programa, por lo que hago Ctrl + C.gdb: programa de salida sin salir de gdb

Mi problema es que esto cierra ambos mi programa y gdb. ¿Cómo puedo salir de mi programa sin salir de gdb?

+4

Eso no se supone que suceda; Se supone que Ctrl-C ** interrumpe ** (no termina) su programa, y ​​definitivamente no se supone que termine gdb. ¿Qué entorno estás usando? – trojanfoe

+1

Estoy usando Cygwin. Extraño. – Randomblue

Respuesta

4

Parece que en Windows, tiene que usar Ctrl-Break no Ctrl-C. Vea esto page.

Extracto:

programas de MS-Windows que llaman SetConsoleMode para apagar el significado especial de pulsaciones de teclas del `Ctrl-C' no puede ser interrumpido tecleando C-C. Por esta razón, gdb en MS-Windows admite C- como una secuencia de tecla de interrupción alternativa , que se puede usar para interrumpir el depurador incluso si ignora C-c.

+1

Gracias. Esto todavía sale de GDB. Ahora cuando se cierra escribe "Quit (core dumped)" – Randomblue

+0

@Randomblue Oh blimey - no parece muy feliz. No sé qué sugerir, aparte de cambiar a los compiladores de Microsoft quizás (son gratuitos con el SDK de Windows). – trojanfoe

+0

@Randomblue ¿ejecutas las cosas desde la consola 'cmd' o' sh'? ¿Es nativo el programa depurado Cygwin o Win32? (para el registro: es 'gdb' Cygwin o Win32?;)) –

2

Primero ejecute el programa (no desde dentro de gdb), luego encuentre su pid.

En otro shell, ejecute gdb --pid=<your program's pid>. Esto conecta gdb a un programa en ejecución. Detiene la ejecución del programa, así que emita c para continuar.

Ahora salga de su programa, su sesión de gdb permanecerá allí.

+0

Mi programa se ejecuta en un host remoto. (Un chip ARM). – Randomblue

17

¿Ha intentado utilizar kill desde dentro de gdb?

+0

Sí. Pero después de 'continuar' no me ejecuto en el símbolo del sistema gdb, así que no pasa nada. – Randomblue

+0

Como dijo @trojanfoe, Ctrl-C debería simplemente interrumpir tu programa, para que tengas de nuevo la consola gdb. Sin embargo, intente utilizar 'start' para iniciar su programa. La ejecución debe detenerse al principio de la función 'main'. Luego usa 'kill' para matar tu programa. – Saphrosit

+0

Cuando intento 'start' obtengo 'No se cargó ninguna tabla de símbolos. Use el comando' file '. " – Randomblue

12

Use ctrl-c para interrumpir la aplicación. Luego ejecute "signal SIGINT" desde el prompt de GDB, que enviará esta señal a su aplicación, haciendo que haga las mismas cosas que normalmente debería haber hecho cuando hace ctrl-c desde la línea de comando.