Wie können wir Probleme beim Absturz von Programmen unter Linux verfolgen?

12

Wenn eine Anwendung unter Windows abstürzt, können wir in der Ereignisanzeige in den Verwaltungstools überprüfen, was abgestürzt ist. Manchmal hat es nützliche Informationen, andere nicht, aber es ist ein Anfang.
Wenn unter Linux eine Anwendung (eine) abstürzt, wie beginnt man zu verfolgen, was passiert ist?
Gibt es zB ein zentrales Protokoll oder ähnliches?

Jim
quelle
2
Die Standardmethode zum Debuggen dieser Art besteht darin, die problematische Anwendung manuell von einem Terminal aus zu starten. Auf diese Weise können Sie alle gedruckten Fehlermeldungen sehen.
Terdon
2
64-Bit-Versionen von Linux protokollieren eine kurze Beschreibung eines abgestürzten Prozesses (einer, der aufgrund eines Signals gestorben ist) /var/log/syslog. Linux bietet eine Möglichkeit, einen Daemon über Prozessabstürze zu informieren. Ubuntus Apport und Red Hats Abrt verwenden dies, um zentralisierte Protokollierungs- und Berichterstellungsfunktionen bereitzustellen. Im Allgemeinen wird ein Core-Dump gespeichert, damit Sie einen Debugger für das abgestürzte Programm aufrufen können.
Mark Plotnick
Ich hätte diese Frage positiv bewertet, aber das OP scheint der Community nicht helfen zu wollen, indem es eine Antwort akzeptiert oder veröffentlicht. Daher werde ich eine ähnliche Frage finden, die eine Antwort akzeptiert und diese positiv bewertet, in der Hoffnung, dass dies der Fall ist Steigen Sie an die Spitze der Suchergebnisse und helfen Sie zukünftigen Suchenden
Mawg sagt, Monica

Antworten:

13

Gibt es zB ein zentrales Protokoll oder ähnliches?

Der normale Ort für Systemprotokolle ist /var/log/. Was in jedes Protokoll eingefügt wird, hängt von der Syslog-Konfiguration ab, aber normalerweise geht alles außer Anmeldungen an /var/log/syslog.

Dies ist keine Garantie dafür, dass einzelne Anwendungen im Falle eines Problems dort Hinweise hinterlassen haben. Aber sie oder die Shell werden wahrscheinlich etwas in die Standard-Out- / Standard-Fehlerströme spucken, und wenn Sie eine problematische Anwendung im Vordergrund von einem Terminal aus ausführen, können Sie dieses Zeug sehen.

Goldlöckchen
quelle
Worauf sollte man achten /var/log? In welcher Protokolldatei gibt es eine Konvention?
Jim
2
Wenn Sie den Absturz verursachen können, sehen Sie, welche Datei unter / var / log zuletzt geändert wurde. Mit ls -lartwurde die letzte Datei in der Liste zuletzt geändert.
Devon_C_Miller
Es gibt Konventionen s - Linux ist viel heterogener als Windows. Syslog bezieht sich auf den Systemlogger, es gibt jedoch keine universelle Implementierung, und die Variationen können dann auf verschiedene Arten konfiguriert werden. Die allgemeine Logik besteht darin, dass Nachrichten von der Anwendung an Syslog gesendet werden und diese Nachrichten dann in verschiedene Dateien sortiert werden. Wie bereits erwähnt, endet /var/log/syslognormalerweise alles in , aber verschiedene Distributionen machen die Dinge anders. Wenn Sie wissen, welches Syslog Sie verwenden, können Sie dessen Konfiguration überprüfen, um dies festzustellen.
Goldlöckchen
6

Auf Ubuntu werden Segfaults unter geschrieben /var/log/kern.log. Ich habe es getestet, indem ich ein Programm erstellt habe, das Fehler aufweist:

void main() {
    int *a=0;
    *a=0;
}

Nachdem es fehlerhaft war, gab es diese Zeile in /var/log/kern.log:

a.out[534]: segfault at 0 ip 08048432 sp bfaec8c0 error 6 in a.out[8048000+1000]
Sashoalm
quelle
1

Wenn Sie in Ubuntu Ihre Anwendung über eine .desktop-Startdatei starten, fügen Sie die Option Terminal=truezu Ihrer .desktop-Datei hinzu.

Sela
quelle