Wenn unter Linux ein Segmentierungsfehler auftritt, wird die Fehlermeldung Segmentation fault (core dumped)
auf dem Terminal (falls vorhanden) ausgegeben und das Programm beendet. Als C / C ++ - Entwickler passiert mir das ziemlich oft, und ich ignoriere es normalerweise und gehe weiter gdb
und erstelle meine vorherige Aktion neu, um die ungültige Speicherreferenz erneut auszulösen. Stattdessen dachte ich, ich könnte vielleicht stattdessen diesen "Kern" verwenden, da gdb
das ständige Ausführen ziemlich mühsam ist und ich den Segmentierungsfehler nicht immer wiederherstellen kann.
Meine Fragen sind drei:
- Wo wird dieser schwer fassbare "Kern" abgeladen?
- Was enthält es?
- Was kann ich damit machen?
gdb path-to-your-binary path-to-corefile
,info stack
gefolgt vonCtrl-d
. Das einzig Besorgniserregende ist, dass Core-Dumping für Sie normal ist.Antworten:
Wenn andere Leute aufräumen ...
... findet man normalerweise nichts. Glücklicherweise hat Linux dafür einen Handler, den Sie zur Laufzeit festlegen können. In /usr/src/linux/Documentation/sysctl/kernel.txt finden Sie:
( danke )
Nach Angaben der Quelle wird dies von der
abrt
Programm (das ist Automatic Bug Reporting Tool, nicht abbrechen), aber auf meinem Arch Linux wird es von systemd erledigt. Möglicherweise möchten Sie einen eigenen Handler schreiben oder das aktuelle Verzeichnis verwenden.Aber was ist da drin?
Nun, was es enthält, ist systemspezifisch, aber gemäß der allwissenden Enzyklopädie :
... also enthält es im Grunde alles
gdb
, immer gewünscht wurde und mehr.Ja, aber ich möchte, dass ich glücklich bin anstatt GDB
Sie können beide glücklich sein , da
gdb
so lange jeden Core - Dump laden, wie Sie eine exakte Kopie Ihres ausführbaren haben:gdb path/to/binary my/core.dump
. Sie sollten dann in der Lage sein, das Geschäft wie gewohnt fortzusetzen und sich darüber zu ärgern, dass Sie versuchen, Fehler zu beheben, anstatt Fehler zu versuchen und zu reproduzieren.quelle
Wenn
ulimit -c
zurückgegeben wird0
, wird auch keine Core-Dump-Datei geschrieben.Sehen Wo nach der Kerndatei suchen, die durch den Absturz einer Linux-Anwendung generiert wurde?
Sie können einen Core-Dump auch manuell auslösen, indem Sie CTRL- \den Prozess beenden und einen Core-Dump verursachen.
quelle
Die Kerndatei wird normalerweise aufgerufen
core
und befindet sich im aktuellen Arbeitsverzeichnis des Prozesses. Es gibt jedoch eine lange Liste von Gründen, warum eine Kerndatei nicht generiert wird, und sie kann sich unter einem anderen Namen vollständig an einer anderen Stelle befinden. Weitere Informationen finden Sie in der core.5-Manpage :quelle
In Ubuntu wird jeder Absturz in / var / crash protokolliert. Der generierte Absturzbericht kann über einen Tool-Apport entpackt werden
und dann kann der Core-Dump im entpackten Bericht mit gelesen werden
quelle