Wie kann ich eine Absturzdatei aus / var / crash lesen?

20

php-fpm ist auf uns abgestürzt und hat eine Datei abgelegt

/var/crash/_usr_sbin_php5-fpm.1002.crash

In dieser Datei sind einige Informationen enthalten, aber was ich suche, ist der Abschnitt CoreDump in einem Base64-codierten Format. Wie kann ich ablesen, was zum Zeitpunkt des Absturzes gelaufen ist?

user76369
quelle

Antworten:

18

Für den Fall, dass Sie keine apport-retraceUnterabhängigkeiten für tool installieren möchten , können Sie das apport-Format in separate Dateien entpacken und wie gewohnt nur CoreDumpdump mit verwenden gdb.

  1. apport-unpack systemGeneratedCrashReportPath.crash yourNewUnpackDirectoryHere
  2. cd yourNewUnpackDirectoryHere/
  3. gdb `cat ExecutablePath` CoreDump (hier auf tildes achten!)
  4. bt (Aktuelle Rückverfolgung ausgeben)

    Hinweis: Beim apport-unpackEntpacken stürzt das Programm manchmal ab (Apport scheint überall kaputt zu sein ... xD), aber Ihr CoreDump und andere Dateien sind vorhanden. Ignorieren Sie sie einfach und löschen Sie alle .crash-Dateien, /var/crashnachdem Sie sie an einen anderen Ort verschoben haben, um dies zu ermöglichen System, um dort neue Absturzberichte von denselben Apps auszugeben.

Stempel
quelle
1
Arbeitete wie ein Zauber, ohne Apport-Retrace installieren zu müssen , danke!
Greuze
1
@digital_infinity nein ?! Überzeugen Sie sich selbst. Es gibt einen großen Unterschied zwischen Echo und Katze ...
Stamster
2
@stamster Du hast recht. Tut mir leid, dass ich vermisst habe, dass es eine Datei mit Namen gibt ExecutablePath. Ich dachte, der Leser muss den ausführbaren Pfad dort füllen.
digital_infinity
15

Es gibt ein Tool namens " apport-retrace.crash", mit dem Sie die .crash-Dateien lesen und entweder mit einem vollsymbolischen Stack-Trace füllen oder eine gdbSitzung mit dem Core-Dump ausführen können . Führen Sie den folgenden Befehl aus, um eine GDB-Sitzung zu starten apport-retrace -g CRASHFILE.crash. Beachten Sie, dass Sie die -dbg-Pakete installiert haben müssen, um einen guten Stack-Trace zu erhalten.

Davon abgesehen (ich bin kein PHP-Experte) haben Sie möglicherweise tatsächlich etwas in eine Ihrer Dateien geschrieben, das den Absturz verursacht.

saiarcot895
quelle
4
Nicht t seem to work: # apport-retrace -g _usr_sbin_php5-fpm.1002.crash FEHLER: Die Berichtsdatei enthält keines der erforderlichen Felder: CoreDump DistroRelease Package ExecutablePath` # grep CoreDump _usr_sbin_php5-fpm.1002.crash CoreDump: base64
user76369
10
Bearbeiten Sie die Absturzdatei und fügen Sie unter ExecutableTimestamp das Feld "Package: 0" hinzu.
DarkNeuron