Sous linux, puis-je utiliser GDB pour déboguer un processus en cours?Puis-je utiliser GDB pour déboguer un processus en cours?
Répondre
Oui. Utilisez la commande attach
. Consultez this link pour plus d'informations. Taper help attach
sur une console GDB donne les éléments suivants:
(gdb) help attach
attacher à un processus ou à l'extérieur de fichier GDB. Cette commande attache à une autre cible, du même type que votre dernière commande «
target
» («info files
» montrera votre pile cible). La commande peut prendre comme argument un identificateur de processus, un nom de processus (avec un identificateur de processus optionnel comme suffixe) ou un fichier de périphérique. Pour un ID de processus, vous devez avoir la permission d'envoyer le processus un signal, et il doit avoir le même uid que le débogueur. Lorsque vous utilisez «attach
» à un processus existant, le débogueur trouve le fonctionnement du programme dans le processus, à la recherche d'abord dans le répertoire courant de travail , ou (s'il ne trouve pas) en utilisant le chemin de recherche de fichier source (voir le "directory
"commande". Vous pouvez également utiliser la commande "file
" pour spécifier le programme et charger sa table de symboles.
REMARQUE: Vous pouvez avoir des difficultés à attacher à un processus en raison de improved security in the Linux kernel - par exemple attacher à l'enfant d'une coquille d'une autre.
Vous aurez probablement besoin de mettre /proc/sys/kernel/yama/ptrace_scope
en fonction de vos besoins. De nombreux systèmes par défaut maintenant 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.
La commande à utiliser est gdb attach pid
où pid est l'ID de processus du processus que vous souhaitez attacher.
Vous pouvez attacher à un processus en cours d'exécution avec gdb -p PID
.
Oui, vous pouvez. Supposons qu'un processus foo
est en cours d'exécution ...
ps -elf | grep foo look for the PID number gdb -a {PID number}
Quelle distribution utilisez-vous? En utilisant une version récente de Fedora, 'gdb -a' affiche une erreur "option -a est ambiguë". –
l'argument officiel est -p/- pid –
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`
Je ne sais pas ce que ça fait mais c'est sûr que ça ne marche pas pour moi. Il dit que
Je trouve que cela fonctionne mieux car il charge la table des symboles en plus de se joindre au processus. Il est à noter que 'program_name' fonctionne si vous êtes dans le même répertoire que le binaire. Je pense qu'un chemin vers le binaire fonctionnerait si vous étiez dans un répertoire différent. – KarateSnowMachine
ps -elf ne semble pas montrer le PID. Je recommande d'utiliser à la place:
ps -ld | grep foo
gdb -p PID
Si l'on veut attacher un processus, ce processus doit avoir le même propriétaire. La racine est capable de s'attacher à n'importe quel processus.
- 1. Puis-je utiliser mon gdb pour déboguer un projet XCode
- 2. Comment déboguer en utilisant gdb?
- 3. Déboguer l'interpréteur PHP avec GDB
- 4. CDT GDB Déboguer sous Windows
- 5. C# utilise la réflexion pour modifier un processus en cours
- 6. utiliser VS.NET pour déboguer l'application
- 7. Comment déboguer un processus CLR dans VS2008?
- 8. CUDA: Déboguer avec -deviceemu et gdb
- 9. obtenir un progid d'un processus en cours
- 10. GDB: débogage de deux threads simultanément d'un processus
- 11. Nombre de processus en cours
- 12. Puis-je utiliser powershell pour inspecter un processus .Net en cours?
- 13. Obtenir pdb dans Emacs pour utiliser le processus Python à partir de virtualenv en cours
- 14. Détermination du thread correct à déboguer dans GDB
- 15. Can gdb attacher automatiquement un processus sur un SIGSEGV
- 16. C#: trouver le processus en cours
- 17. Comment déboguer le point d'entrée du processus fork-exec dans GDB?
- 18. Injecter un hôte CLR dans un processus en cours - possible?
- 19. Récupère la trace d'une pile d'un processus en cours
- 20. Attachez gdb à traiter avant de connaître l'ID de processus
- 21. Afficher les instructions d'assemblage en cours dans GDB
- 22. Tout outil (s) pour connaître la disposition (segments) du processus en cours d'exécution dans Windows?
- 23. Débogage d'un processus de thread à l'aide de gdb/dbx
- 24. Souhaitez-vous utiliser pub/sub ou files d'attente pour les processus d'arrière-plan en cours d'exécution?
- 25. Récupérer les noms des processus en cours
- 26. "Impossible de demander ThreadStore" - processus de débogage WinDbg en cours
- 27. Tuyau entre le processus en cours et les autres processus
- 28. Comment déboguer un programme qui doit être exécuté en tant que root à partir de gdb (Eclipse) en tant qu'utilisateur (set gdb suid root?)
- 29. Obtenir le processus en cours donné handle de processus
- 30. Visual Studio 2008 .Net - Pas sur le processus en cours
Le lien est cassé :(De mon point de vue, j'aime les réponses que [celui-ci] (http://stackoverflow.com/a/2702170/938111) de [J. Polfer] (http: // stackoverflow .com/users/40411/j-polfer). Bravo;) – olibre
J'ai corrigé le lien. – Attie
cela fonctionne aussi pour un pid d'un processus sur une cible distante? – Bionix1441