utilizar usar test para opciones modo depurar depurador debug como codigo linux debugging gdb

linux - test - ¿Puedo usar GDB para depurar un proceso en ejecución?



modo debug linux (7)

El comando a usar es gdb attach pid donde pid es la identificación del proceso al que desea adjuntar.

En Linux, ¿puedo usar GDB para depurar un proceso que se está ejecutando actualmente?


Puede adjuntar a un proceso en ejecución con gdb -p PID .


Sí tu puedes. Supongamos que un proceso foo está ejecutando ...

ps -elf | grep foo look for the PID number gdb -a {PID number}


Sí. Tu puedes hacer:

gdb program_name program_pid

Un atajo sería (suponiendo que solo se está ejecutando una instancia):

gdb program_name `pidof program_name`


Si uno desea adjuntar un proceso, este proceso debe tener el mismo propietario. La raíz puede adjuntarse a cualquier proceso.


ps -elf no parece mostrar el PID. Recomiendo usar en su lugar:

ps -ld | grep foo gdb -p PID


Sí. Use el comando attach . Consulte este enlace para obtener más información. La help attach en una consola GDB da lo siguiente:

(gdb) help attach

Adjunte a un proceso o archivo fuera de GDB. Este comando se conecta a otro objetivo, del mismo tipo que su último comando " target " (" info files " mostrará su pila objetivo). El comando puede tomar como argumento una identificación de proceso, un nombre de proceso (con una identificación de proceso opcional como sufijo) o un archivo de dispositivo. Para una identificación de proceso, debe tener permiso para enviar una señal al proceso, y debe tener el mismo uid efectivo que el depurador. Al usar " attach " a un proceso existente, el depurador encuentra el programa ejecutándose en el proceso, buscando primero en el directorio de trabajo actual o (si no se encuentra allí) usando la ruta de búsqueda del archivo de origen (ver el comando " directory "). También puede usar el comando " file " para especificar el programa y cargar su tabla de símbolos.

NOTA: Puede tener dificultades para conectarse a un proceso debido a la seguridad mejorada en el kernel de Linux , por ejemplo, adjuntar al hijo de un shell de otro.

Es probable que necesite establecer /proc/sys/kernel/yama/ptrace_scope según sus requisitos. Muchos sistemas ahora tienen un valor predeterminado de 1 o superior.

The sysctl settings (writable only with CAP_SYS_PTRACE) are: 0 - classic ptrace permissions: a process can PTRACE_ATTACH to any other process running under the same uid, as long as it is dumpable (i.e. did not transition uids, start privileged, or have called prctl(PR_SET_DUMPABLE...) already). Similarly, PTRACE_TRACEME is unchanged. 1 - restricted ptrace: a process must have a predefined relationship with the inferior it wants to call PTRACE_ATTACH on. By default, this relationship is that of only its descendants when the above classic criteria is also met. To change the relationship, an inferior can call prctl(PR_SET_PTRACER, debugger, ...) to declare an allowed debugger PID to call PTRACE_ATTACH on the inferior. Using PTRACE_TRACEME is unchanged. 2 - admin-only attach: only processes with CAP_SYS_PTRACE may use ptrace with PTRACE_ATTACH, or through children calling PTRACE_TRACEME. 3 - no attach: no processes may use ptrace with PTRACE_ATTACH nor via PTRACE_TRACEME. Once set, this sysctl value cannot be changed.