GNU/Linux >> Tutoriels Linux >  >> Linux

Puis-je utiliser GDB pour déboguer un processus en cours ?

Vous pouvez vous attacher à un processus en cours d'exécution avec gdb -p PID .


Oui. Utilisez le attach commande. Consultez ce lien pour plus d'informations. Taper help attach sur une console GDB donne ceci :

(gdb) help attach

Attacher à un processus ou à un fichier en dehors de GDB.Cette commande attache à une autre cible, du même type que votre dernier"target " commande ("info files " affichera votre pile cible). La commande peut prendre comme argument un identifiant de processus, un nom de processus (avec un identifiant de processus facultatif comme suffixe) ou un fichier de périphérique. Pour un identifiant de processus, vous devez être autorisé à envoyer le traiter un signal, et il doit avoir le même uid effectif que le débogueur. Lors de l'utilisation de "attach " à un processus existant, le débogueur trouve le programme en cours d'exécution dans le processus, en regardant d'abord dans le répertoire de travail actuel, ou (s'il n'y est pas trouvé) en utilisant le chemin de recherche du fichier source (voir le "directory "). Vous pouvez également utiliser la commande "file " commande pour spécifier le programme, et pour charger sa table de symboles.

REMARQUE :Vous pouvez avoir des difficultés à vous attacher à un processus en raison de l'amélioration de la sécurité dans le noyau Linux - par exemple, l'attachement à l'enfant d'un shell à partir d'un autre.

Vous devrez probablement définir /proc/sys/kernel/yama/ptrace_scope en fonction de vos exigences. De nombreux systèmes utilisent désormais par défaut 1 ou supérieur.

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.

Oui. Vous pouvez faire :

gdb program_name program_pid

Un raccourci serait (en supposant qu'une seule instance est en cours d'exécution) :

gdb program_name `pidof program_name`

Linux
  1. Changer l'environnement d'un processus en cours ?

  2. Pouvez-vous utiliser des ancres ^ $ avec Ls ?

  3. Comment un processus peut-il intercepter stdout et stderr d'un autre processus sous Linux ?

  4. GDB peut-il modifier le code assembleur d'un programme en cours d'exécution ?

  5. L'ID de thread d'un processus multithread peut-il être le même que l'ID de processus d'un autre processus en cours d'exécution ?

Comment répertorier les processus en cours d'exécution sous Linux

Comment déboguer des programmes C sous Linux à l'aide de gdb

Comment utiliser GDB pour déboguer des programmes dans Ubuntu 20.04

Processus en cours d'exécution

Puis-je faire aveuglément confiance à 127.0.0.1 ?

Comment puis-je obtenir l'heure de l'horloge murale d'un processus en cours d'exécution ?