Coredump
Wenn eine Anwendung einen Segfault (Segmentation fault: Speicherzugriffsfehler) verursacht, dann kann ein Coredump für hilfreiche Informationen zwecks Fehlersuche bringen.
Ein Coredump wurde bei mir nur mit einem nicht-root-User geschrieben.
Der Linuxkernel ist grundsätzlich in der Lage einen Coredump zu schreiben. Die Funktion ist allerdings von grund an ausgeschaltet.
So schaltet man sie in Ubuntu ein:
vi /etc/default/apport
Hier den Parameter von enable=0 auf 1 setzen.
Danach noch den Dienst starten:
service apport start
Wenn nun das Programm in der Console, aus einem Verzeichnis aus, in dem man Schreibrechte hat, gestartet wird, dann produziert es einen Segfault,
aber die Meldung in der Console lautet dann nicht Segmentation fault sondern Segmentation fault (Speicherabzug geschrieben).
Nach dem Abbruch des Programms findet man nun in dem Verzeichnis eine core Datei.
Diese wiederum kann mit dem Tool gdb geöffnet und gelesen werden.
Einfach folgendermaßen öffnen:
gdb <verursachendes Programm> <corefile>
Nützliche Befehle in gdb sind:
- bt - Ausgabe eines stacktrace
- up/down - Navigation innerhalb des strackframe
- thread [Nummer] - Anzeige des aktuellen Thread / Wechsel zu einem anderem Thread mit der angegebenen Nummer.
- c - Fortsetzen der gestarteten Anwendung.
- print Ausdruck - den Wert des spezifizierten Ausdruckes ausgeben. Kann verwendet werden, den Wert bestimmter Variablen zum Beispiel zu kontrollieren, spezifizieren einfach den variablen Namen als Ausdruck
Beenden kann man gdb mit
quit