Puede adjuntar a un proceso en ejecución con gdb -p PID
.
Sí. Usa el attach
dominio. Echa un vistazo a este enlace para obtener más información. Escribiendo help attach
en una consola GDB da lo siguiente:
(gdb) help attach
Adjuntar a un proceso o archivo fuera de GDB. Este comando se adjunta a otro objetivo, del mismo tipo que el último"
target
" comando ("info files
" mostrará su pila de destino). 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 el procesar una señal, 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 fuente (ver "directory
" comando). También puede utilizar el comando "file
" Comando para especificar el programa y cargar su tabla de símbolos.
NOTA:Es posible que tenga dificultades para conectarse a un proceso debido a la mejora de la seguridad en el kernel de Linux, por ejemplo, al conectarse al elemento secundario de un shell desde otro.
Es probable que deba configurar /proc/sys/kernel/yama/ptrace_scope
dependiendo de sus requisitos. Muchos sistemas ahora están predeterminados en 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.
Sí. 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`