2010-11-28 9 views
17

Estoy depurando un programa usando gdb. Cada vez que pierdo un punto de interrupción o decido agregar otro punto de observación, tengo que matar el proceso y volver a ejecutarlo. Para adjuntarle el gdb existente, uso attach <pid>. Sin embargo, tengo que averiguar el pid del nuevo proceso.¿Cómo puedo ejecutar comandos externos desde el símbolo del sistema gdb?

La forma en que lo hago hoy es suspender gdb, obtener el pid con ps -C <program_name> y luego volver a gdb para adjuntarlo.

¿Hay alguna forma de ejecutar un comando UNIX desde el símbolo del sistema GDB sin salir de la cáscara, para que yo pudiera hacer algo como esto desde el interior de GDB:

attach `ps -C <program_name>` 

estoy trabajando en Linux.

Respuesta

18

(GDB) ayuda shell
Ejecutar el resto de la línea como un comando shell. Sin argumentos , ejecute un shell inferior.

Después de terminar, puede usar 'exit' para volver a gdb.

9
gdb$ shell 

shell$ execute_your_commands 

shell$ exit 

gdb$ you_have_returned_back_to_gdb_prompt 
4

sólo puede utilizar shell seguido del comando que desea ejecutar, por ejemplo .:

gdb$ shell g++ tsort.c -o tsort 

Esto es sólo una forma corta de la respuesta anterior.

+0

En este modo, gdb no parece detectar o no puede informar de problemas cuando hay un volcado del núcleo. – Derek

1

Solo para ampliar la respuesta aceptada, el atajo para shell es !.

(gdb) help!

Ejecute el resto de la línea como un comando de shell. Sin argumentos, ejecuta un shell inferior.

Cuestiones relacionadas