Parfois, j'ai besoin d'exécuter une application à partir du terminal pour le débogage. Si je suis sûr que le bogue se produira peu de temps après le lancement de l'application, je peux exécuter cette application à partir du terminal.
Cependant, des bugs se produisent de manière inattendue, et alors seulement j'ai besoin de surveiller l'application buggy depuis le terminal (pour voir sa sortie).
Puis-je récupérer une application du terminal, qui n'a pas été lancée à l'aide du terminal? Si c'est le cas, comment?
command-line
process
debugging
Benjoin
la source
la source
~/.xsession-errors
si vous l'avez lancé via l'interface graphique.Réponses:
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 ne soyez intéressé que par la sortie de diagnostic, vous pouvez déterminer le pid du processus, puis dans le terminal:pour voir stdout:
pour voir stderr:
la source
cat /proc/1840/fd/1
il semble renvoyer la sortie d'autres processus que celui que j'ai choisi. (1840 est actuellement pour Skype selon System Monitor) Il montre également la sortie d'autres programmes ...: |Ou vous pouvez utiliser
strace
comme çala source
Vous pouvez joindre avec
gdb
à un processus en cours.La syntaxe est
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.
la source
gdb program 1452
(j'ai aussi essayégdb 1452
), mais il renvoie "1452: Aucun fichier ou répertoire de ce type".GNU gdb (Ubuntu/Linaro 7.2-1ubuntu11) 7.2 Copyright (C) 2010 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "i686-linux-gnu". For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>... 1840: No such file or directory.
gdb program pid
. Je pense que la sortie que vous avez montrée estgdb pid
Vous recherchez probablement
retty
. Vous pouvez également rechercher "attach tty". Fondamentalement, cela se fait en utilisantptrace
afin que vous puissiez même rouler le vôtre.la source