2012-05-04 13 views

Respuesta

13

que intentó (en Bash):

while true ; do gdb -ex run a.out -ex quit ; done ; 

Desafortunadamente, esto resultó ser más difícil de matar, pero no automatizar correr, y cuando el programa falla (Probé con un programa antiguo que causa un SIGABRT), gdb pregunta "El programa se está ejecutando. ¿Salir de todos modos? (Y o n)", así que solo presiona n.

+0

acaba de intentar esto. Para matarlo, simplemente presione 'ctrl-Z' y luego' kill% [job number] '. Puede usar 'jobs' para verificar el número de trabajo. –

+0

while true; do gdb -ex ejecutar a.out -ex quit; dormir 0.2; hecho ; –

2

utilizar un script de shell para ejecutar gdb repedatedly, y el uso de las opciones para --batch -x <cmdfile>gdb para especificar un archivo de comandos que simplemente tiene la palabra run para ejecutar el programa. Así que algo como esto:

$ echo run > cmdfile ; while gdb --batch -x cmdfile myprogram ; do : ; done 
6

Me encontré con este mismo problema, y ​​se me ocurrió lo que creo que es una manera bastante agradable de detener el ciclo infinito que sugirió BoBTFish.

En lugar de bucle while true, puede utilizar la existencia de un archivo ficticio para controlar el bucle, por ejemplo:

touch loopfile; while [ -f loopfile ] ; do gdb -ex run a.out -ex quit ; done ; 

Cuando desea detener la sesión de depuración infinita, puede abrir una nueva terminal en el mismo directorio y rm loopfile, o puede salir desde el mismo terminal interrumpiendo con control-c y borrar loopfile desde dentro gdb:

^CQuit 
A debugging session is active. 

    Inferior 1 [process 11136] will be killed. 

Quit anyway? (y or n) n 
Not confirmed. 
(gdb) shell rm loopfile 
(gdb) quit 
A debugging session is active. 

    Inferior 1 [process 11136] will be killed. 

Quit anyway? (y or n) y 

Hopef Si esto es útil para alguien en el futuro, parece una forma agradable (aunque hackosa) de solucionar problemas intermitentes.

0

trayectoria en bucle + LD + comando argumentos de línea de ejemplo

for i in {0..99}; do LD_LIBRARY_PATH=/some/path/to/libs gdb -ex 'set args arg1 arg2 arg3' -ex run ./execName -ex quit ; done 
Cuestiones relacionadas