2010-02-22 9 views

Respuesta

62

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

(gdb) help attach 

asociar a un proceso o archivo fuera del BGF. Este comando se conecta a otro objetivo, del mismo tipo que su último comando "target" ("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 una señal al proceso, y debe tener el mismo uid efectivo que el depurador. Cuando se utiliza "attach" a un proceso existente, el depurador encuentra el programa consecutivo en el proceso, mirando por primera vez en la corriente de trabajo directorio, o (si no se encuentra allí) utilizando la ruta de búsqueda de archivos fuente (ver el "directory "comando". También puede usar el comando "file" para especificar el programa y cargar su tabla de símbolos.


NOTA: Usted puede tener dificultad para fijar un proceso debido a improved security in the Linux kernel - por ejemplo unir al niño de una cáscara de otro.

Es probable que necesite establecer /proc/sys/kernel/yama/ptrace_scope dependiendo de sus requisitos. Muchos sistemas ahora tienen el valor predeterminado 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. 
+8

El enlace está roto :(Desde mi punto de vista, me gustan las respuestas como [ésta] (http://stackoverflow.com/a/2702170/938111) de [J. Polfer] (http: // stackoverflow .com/users/40411/j-polfer). Cheers;) – olibre

+0

He solucionado el problema. – Attie

+0

¿Esto también funciona para un pid de un proceso en un objetivo remoto? – Bionix1441

12

El comando a utilizar es gdb attach pid donde pid es el identificador de proceso del proceso que desea adjuntar a.

81

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

2

Sí, puedes. Suponga que se está ejecutando un proceso foo ...

 
ps -elf | grep foo 

look for the PID number 

gdb -a {PID number} 
+5

¿En qué distribución se está ejecutando? Usando una versión reciente de Fedora, 'gdb -a' imprime un error de "opción -a es ambiguo". –

+1

el argumento oficial es -p/- pid –

21

Sí. Que puede hacer:

gdb program_name program_pid 

Un acceso directo sería (suponiendo que sólo una instancia está en marcha):

gdb program_name `pidof program_name` 
+0

No sé lo que hace pero seguro como el infierno no funciona para mí. Dice que no existe. – Owl

+2

Me parece que esto funciona mejor ya que carga la tabla de símbolos además de adjuntar al proceso. Cabe señalar que 'program_name' funciona si estás en el mismo directorio que el binario. Creo que una ruta al binario funcionaría si estás en un directorio diferente. – KarateSnowMachine

2

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

ps -ld | grep foo 
gdb -p PID 
1

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

Cuestiones relacionadas