Wie kann ich die CoreDump-Datei anzeigen?

13

Wenn ein Fehler aufgrund eines Absturzes gemeldet wird, wird der Fehler als privat deklariert und eine Datei mit dem Namen CoreDump.gz erstellt. In der Bug Triage-Dokumentation heißt es:

Wenn der Absturz immer noch einen CoreDump.gz-Anhang enthält, war es nicht möglich, automatisch einen vollständig symbolischen Stack-Trace abzurufen und nach Duplikaten zu suchen.

Stacktrace.txt scheint für einen Menschen lesbar zu sein. Wie kann ich die Bedeutung eines Stack-Trace verstehen? CoreDump withing CoreDump.gz scheint für Menschen nicht lesbar zu sein. Was ist ein "vollsymbolischer Stack-Trace"? Was ist der Unterschied zwischen einem "vollständig symbolischen Stack-Trace"? Wie kann ich den Inhalt einer CoreDump-Datei anzeigen? (versuchte "Katze", aber es ist nicht sauber)

komputes
quelle

Antworten:

15

Coredump.gz ist der (komprimierte) Speicher, auf den das abgestürzte Programm zugreifen kann. Es ist eine Binärdatei. Coredumps sind eine Schatzkammer, in der alle Arten von privaten Daten abgebaut werden müssen.

Coredumps können mit 'gdb' angezeigt werden:

gdb --core=mycoredump

Natürlich benötigen Sie weiterhin die Debug-Pakete, die diesem Kern zugeordnet sind.

Sie können dann ein Stacktrace generieren, indem Sie:

(gdb) bt

um ein Stacktrace des aktuellen Threads zu generieren - ohne Parameterauflösung - oder

(gdb) thread apply all bt full

um ein Stacktrace aller Threads im Coredump mit Parameterauflösung zu generieren.

Stacktrace und Full Stacktraces zeigen den Steuerungsfluss innerhalb eines Programms. In Python wird oben im Stacktrace der älteste Aufruf angezeigt, unten der jüngste. für so ziemlich alles andere ist der oberste Anruf der jüngste und der unterste der älteste.

Eine vollständige Stapelverfolgung zeigt nicht nur den Fluss, sondern auch die Parameterwerte an. Hier finden wir normalerweise private Daten. Angenommen, Sie sehen eine Funktion namens "validatePassword" mit einem Parameter namens "Password" und dem Wert "MySecretPassword".

Stacktraces sind normalerweise nur dann hilfreich, wenn die Debug-Pakete installiert sind (damit die Stack-Frames in etwas aufgelöst werden können, das wir leicht lesen können). Für die Analyse eines Stacktraces müssen die Quellen vorhanden sein, die zum Erstellen dieser speziellen Programminstanz verwendet wurden.

hggdh
quelle
CoreDump ist eine Binärdatei, aber wie sehen Sie sie an? Stacktraces sind nur hilfreich, wenn Debug-Pakete installiert sind. Warum meldet apport dies dann anders?
komputes
1
Die CoreDump-Datei soll nicht angezeigt werden, sondern zum Debuggen in gdb verwendet werden. Sie benötigen eine Maschine, auf der die gleiche Version der Software (und alle Abhängigkeiten) ausgeführt wird, die den Absturz verursacht und über die Debug-Pakete verfügt. Anschließend können Sie mit Carlos den Stack-Trace abrufen.
Stgraber
2
Nun wissen wir, warum dies für apport immer noch relevant ist, da apport eine Reihe von "Retracern" enthält, die Ihren Coredump abrufen, die Debug-Pakete auf einer Box im DC installieren und dann den vollständigen Stacktract an den Fehlerbericht anhängen.
Stgraber
Zusätzliche Dokumentation: gnu.org/software/gdb/documentation
komputes
Zusätzliche Dokumentation: unknownroad.com/rtfm/gdbtut/gdbtoc.html
komputes