2009-01-07 33 views

Respuesta

15

sólo tiene que utilizar una interrupción periódica Ctrl - c funcionará bien. GDB acaba de reenviar el SIGINT al proceso de depuración que luego muere. GDB captará la salida no estándar y dividirá el proceso allí, por lo que aún puede examinar todos los hilos, sus pilas y los valores actuales de las variables. Esto funciona bien, aunque sería mejor usar los puntos de quiebre. La única vez que me encuentro haciendo esto es si creo que he entrado en algún tipo de ciclo infinito.

+0

Intenté^C pero no funcionó. No puedo escribir nada en el mensaje. También el programa es una interfaz de usuario de subprocesos múltiples, ¿podría ser ese el problema? – anand

+0

Ctrl-C woks como yo quiera, pero no reproduzco esto en GDB 7.7.1: el proceso no pareció obtener la Ctrl-C y morir. Solo fue detenido por GDB, no fue asesinado. Pulsar 'c' nuevamente o' detach' lo hace continuar desde donde se detuvo. –

4

Simplemente escriba BREAK sin ningún argumento.

Break, cuando se invoca sin argumentos, ruptura establece un punto de interrupción en la próxima instrucción a ser ejecutada en el marco de la pila seleccionada

+0

En el contexto de gdb, ejecutar, detener, avanzar. Este era exactamente el tipo de "detención" que necesitaba, y la aplicación se explicaba en la documentación de gdb. +1 – hobb

4

iniciar un intérprete, encontrar el ID de proceso usando ps y enviarlo SIGSTOP o SIGINT mediante el uso de el comando kill (por ejemplo, kill -INT pid).

10

Las aplicaciones GUI no reaccionan a^C y^Rompen el camino de las aplicaciones de consola. Dado que estos proyectos más días no triviales tienden a ser las aplicaciones GUI o bibliotecas utilizadas principalmente en aplicaciones GUI, tiene dos opciones:

  1. Enviar SIGSTOP a la aplicación de una terminal separada. Esto es engorroso.

  2. Si presiona^C o^Pausa en el indicador GDB, GDB finalizará pero la aplicación seguirá ejecutándose. A continuación, puede ejecutar GDB de nuevo para conectarlo mediante el modificador de línea de comandos -p. Esto pierde el estado del depurador.

En ambos casos, es posible encontrar este útil: tasklist | grepProcessName| sed -e 's/ProcessName*\([0-9]*\).*/gdbModuleName-pid=\1/' > rungdb.sh Puede modificar este para su uso en scripts de shell, archivos make o para enviar una señal en lugar de asociar el BGF .

info threads te ayudarán a descubrir qué hilo quieres ver. A continuación, utilice threadThreadNumber para cambiar a ella.

Cuestiones relacionadas