tutorial - GDB cómo detener la ejecución sin un punto de interrupción?
gdb tutorial (4)
¿Cómo detengo una ejecución de gdb sin un punto de interrupción?
Inicie un shell, busque el ID del proceso usando ps y envíe SIGSTOP o SIGINT usando el comando kill (por ejemplo, kill -INT pid).
Simplemente escriba BREAK sin ningún argumento.
Break, cuando se llama sin ningún argumento, break establece un punto de interrupción en la próxima instrucción que se ejecutará en el marco de pila seleccionado
Solo use una interrupción regular Ctrl - c funcionará bien. GDB simplemente reenvía 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.
Las aplicaciones GUI no reaccionan a ^ C y ^ Rompen la forma en que lo hacen las aplicaciones de la consola. Dado que en la actualidad la mayoría de los proyectos no triviales tienden a ser aplicaciones de GUI o bibliotecas utilizadas principalmente en aplicaciones de GUI, tiene dos opciones:
Enviar SIGSTOP a la aplicación desde un terminal separado. Esto es engorroso.
Si presiona ^ C o ^ Pausa en el prompt de GDB, GDB terminará pero la aplicación seguirá ejecutándose. Luego puede ejecutar GDB de nuevo para adjuntarlo usando el
-p
de línea de comandos-p
. Esto pierde el estado del depurador.
En ambos casos, puede encontrar esto útil: tasklist | grep
tasklist | grep
ProcessName
| sed -e ''s/
| sed -e ''s/
ProcessName
*/([0-9]*/).*/gdb
ModuleName
-pid=/1/'' > rungdb.sh
Puede modificar esto para usarlo en scripts de shell, makefiles o para enviar una señal en lugar de adjuntar GDB.
info threads
te ayudarán a descubrir qué hilo quieres ver. Luego usa el thread
ThreadNumber
para cambiar a él.