En Linux, ¿puedo usar GDB para depurar un proceso que se está ejecutando actualmente?¿Puedo usar GDB para depurar un proceso en ejecución?
Respuesta
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.
El comando a utilizar es gdb attach pid
donde pid es el identificador de proceso del proceso que desea adjuntar a.
Puede conectarlo a un proceso en ejecución con gdb -p PID
.
Sí, puedes. Suponga que se está ejecutando un proceso foo
...
ps -elf | grep foo look for the PID number gdb -a {PID number}
¿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". –
el argumento oficial es -p/- pid –
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`
No sé lo que hace pero seguro como el infierno no funciona para mí. Dice que
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
ps -elf no parece mostrar el PID. le recomiendo usar en su lugar:
ps -ld | grep foo
gdb -p PID
Si uno desea adjuntar un proceso, este proceso debe tener el mismo propietario. La raíz puede adjuntarse a cualquier proceso.
- 1. Depurar qemu con gdb
- 2. Determinar el hilo correcto para depurar en GDB
- 3. ¿Cómo depurar usando gdb?
- 4. ¿Cómo puedo depurar fallas St9bad_alloc en gdb en C?
- 5. Python REPL para un proceso en ejecución
- 6. GDB backtrace en el proceso secundario
- 7. ¿Cómo puedo usar "ver" GDB?
- 8. ¿Cómo puedo adjuntar un depurador a un proceso Perl en ejecución?
- 9. Cómo depurar un proceso colgado multiproceso en Linux?
- 10. Puede gdb adjuntar automáticamente un proceso en un SIGSEGV
- 11. ¿Cómo depurar el punto de entrada del proceso fork-exec en GDB?
- 12. ¿cómo busco toda la memoria de un proceso en gdb?
- 13. Obtener la pila detrás de un proceso en ejecución
- 14. ¿Cómo puedo usar nohup para ejecutar el proceso como proceso en segundo plano en Linux?
- 15. ¿Matar un proceso en ejecución en ColdFusion?
- 16. GDB adjuntándose a un proceso donde se eliminó el ejecutable
- 17. fuerza cualquier proceso en ejecución para bloquear
- 18. Solaris GDB: ¿Cómo pausar la ejecución?
- 19. ¿Cómo uso el depurador mingW gdb para depurar un programa C++ en Windows?
- 20. Cómo depurar programas escritos en fasm en Linux usando gdb?
- 21. ¿Cómo obtener un buen funcionamiento de un proceso en ejecución?
- 22. ¿Cómo puedo depurar un proceso win32 que inesperadamente termina en silencio?
- 23. ¿Cómo se usa gdb para depurar el código?
- 24. ¿Cómo depurar las bibliotecas compartidas en tiempo de ejecución?
- 25. ¿Cómo puedo generar un SIGINT cuando uso XCode para depurar?
- 26. Visual Studio tiene privilegios insuficientes para depurar este proceso. Para depurar este proceso, Visual Studio debe ejecutarse como administrador
- 27. Agregar funciones en gdb en tiempo de ejecución
- 28. Proceso de ejecución dado el proceso handle
- 29. Opción GCC que puede causar problemas al depurar con GDB
- 30. ¿Puedo usar SetErrorMode en el proceso de C#?
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
He solucionado el problema. – Attie
¿Esto también funciona para un pid de un proceso en un objetivo remoto? – Bionix1441