Parfois, j'ai besoin d'exécuter une application à partir d'un terminal pour le débogage. Si je suis sûr que le bogue surviendra peu après le lancement de l'application, je peux exécuter cette application à partir du terminal.
Cependant, des bugs surviennent de manière inattendue, et alors je n'ai plus qu'à surveiller l'application buggy depuis le Terminal (pour voir sa sortie).
Puis-je récupérer une application depuis un terminal qui n'a pas été lancé avec Terminal? Si c'est le cas, comment?
Chaque processus sous Linux a un répertoire spécial /proc/{pid}/fd/
. 0 est stdin, 1 est stdout et 2 est stderr. Donc, en supposant que vous êtes uniquement intéressé par la sortie de diagnostic, vous pouvez déterminer le pid du processus, puis dans le terminal:
pour voir stdout:
cat /proc/{pid of process}/fd/1
pour voir stderr:
cat /proc/{pid of process}/fd/2
Ou vous pouvez utiliser strace
NAME _ comme ceci
Sudo strace -p $pid_of_the_process
Vous pouvez attacher avec gdb
à un processus en cours d'exécution.
La syntaxe est
gdb program pid
Ok, vous ne pouvez pas voir le code source si les informations de débogage sont supprimées, ce qui est la valeur par défaut pour les applications déployées. Mais vous pouvez probablement voir les messages stdout/stderr et debugger, segfaults.
Vous recherchez probablement retty
. Vous pouvez également rechercher "attach tty". Fondamentalement, c'est fait avec ptrace
afin que vous puissiez même rouler le vôtre.