Coredump

Überblick

Mit den richtigen Vorbereitungen (Siehe Kapitel 'Vorbereitung' weiter unten) erzeugt eine Applikation einen Coredump sobald sie z.B. wegen einem Segfault abstürzt.

Ein Coredump ist ein Speicherabbild des Computers während des Absturzes. Damit lässt sich nach dem Absturz die Ursache des Absturzes ermitteln.

Um einen Coredump zu erzeugen wird der gdb nicht benötigt. Der gdb kann aber genutzt werden, um den Coredump zu analysieren.

Ein Coredump kann schnell mehrere hundert Megabyte gross werden. Auf dieser Seite wird nur erklärt, wie man möglichst einfach die Ursache für Segfault finden kann. Tiefere Analysen sind aber auch möglich.

Vorbereitung

Die Applikation unter Test muss mit Debug Symbolen kompiliert werden. Mehr dazu im Crashcourse gdb im Kapitel Vorbereitung.

Zusätzlich muss für den Coredump Speicher freigegeben werden. Dazu muss, in der gleichen Shell in der auch die Applikation gestartet wird, ulimit -c unlimited eingegeben werden. Mit ulimit -a kann überprüft werden, ob der Speicher freigegeben wurde. Der Speicher muss jedesmal neu freigegeben werden, wenn eine neue Shell erzeugt wird.

Wenn die Applikation jetzt abstürzt, erzeug sie eine Datei mit dem Namen core.

Achtung: Die Datei wird wegen einem Bug möglicherweise nicht überschrieben. Der Coredump muss umbenannt, verschoben oder gelöscht werden, bevor die Applikation neu gestartet wird.

Analyse des Coredumps

Der Coredump kann mit dem gdb analysiert werden. Dazu wird neben dem Coredump auch die Applikation selbst, also das Binary, benötigt.

1.) gdb starten
gdb </path/to/the/binary> </path/to/coredump>

2.) Segfault analysieren
list
backtrace
info locals
print <variablenname>

Automatisierter Core Dump Report