Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
software:gdb:coredump [2018-04-13 13:01] mgehrig2software:gdb:coredump [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1
Zeile 1: Zeile 1:
-====== Coredump ====== 
-===== Überblick ===== 
-Mit den richtigen Vorbereitungen (Siehe Kapitel 'Vorbereitung' weiter unten) erzeugt eine Applikation enen 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. 
-Vertieftere Analysen sind aber auch möglich. 
- 
- 
-===== Vorbereitung ===== 
-Die Applikation unter Test muss mit Debug Symbolen kompiliert werden. 
-Mehr dazu im [[software:gdb:crashcoursegdb|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 [[https://bugs.launchpad.net/ubuntu/+source/apport/+bug/160999|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''