Manchmal muss ich zum Debuggen eine Anwendung vom Terminal ausführen. Wenn ich sicher bin, dass der Fehler kurz nach dem Starten der Anwendung auftritt, kann ich diese Anwendung über das Terminal ausführen.
Es treten jedoch unerwartet Fehler auf, und nur dann muss ich die fehlerhafte Anwendung vom Terminal aus überwachen (um die Ausgabe zu sehen).
Kann ich dann eine Anwendung vom Terminal abholen, die nicht mit Terminal gestartet wurde? Wenn das so ist, wie?
command-line
process
debugging
Benjamin
quelle
quelle
~/.xsession-errors
wenn Sie sie über die GUI gestartet haben.Antworten:
Jeder Prozess unter Linux hat ein spezielles Verzeichnis
/proc/{pid}/fd/
. 0 ist stdin, 1 ist stdout und 2 ist stderr. Unter der Annahme, dass Sie nur an Diagnoseausgaben interessiert sind, können Sie die Prozess-PID ermitteln und dann im Terminal Folgendes ausführen:um stdout zu sehen:
um stderr zu sehen:
quelle
cat /proc/1840/fd/1
es starte, scheint es die Ausgabe von anderen Prozessen als dem zurückzugeben, den ich aufgenommen habe. (1840 ist derzeit für Skype laut System Monitor) Zeigt auch die Ausgabe anderer Programme an ...: |Oder Sie verwenden können ,
strace
wie diesequelle
Sie können an
gdb
einen laufenden Prozess anhängen .Die Syntax lautet
Ok, Sie können den Quellcode nicht sehen, wenn die Debug-Informationen entfernt wurden. Dies ist die Standardeinstellung für bereitgestellte Anwendungen. Aber Sie können wahrscheinlich stdout / stderr- und Debugger-Meldungen sehen, Segfaults.
quelle
gdb program 1452
(ich habe es auch versuchtgdb 1452
), aber es wird "1452: Keine solche Datei oder kein solches Verzeichnis" zurückgegeben.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
. Ich denke, die Ausgabe, die Sie gezeigt haben, ist vongdb pid
Sie suchen wahrscheinlich nach
retty
. Sie könnten auch nach "attach tty" suchen. Grundsätzlich ist es mit getan,ptrace
so dass Sie sogar Ihre eigenen rollen könnten.quelle