GNU/Linux >> Tutoriales Linux >  >> Linux

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

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`

Linux
  1. ¿Asegurarse de que un proceso esté siempre en ejecución?

  2. ¿Comprobar el proceso si se está ejecutando lo mismo?

  3. ¿Puedes usar anclas ^ $ con Ls?

  4. ¿Cómo puede un proceso interceptar stdout y stderr de otro proceso en Linux?

  5. ¿Puede GDB cambiar el código ensamblador de un programa en ejecución?

Cómo enumerar los procesos en ejecución en Linux

Cómo usar GDB para depurar programas en Ubuntu 20.04

Procesos corriendo

¿Cambiar el entorno de un proceso en ejecución?

¿Cómo puedo saber la ruta absoluta de un proceso en ejecución?

¿Determinar en qué grupo(s) se encuentra un proceso en ejecución?