Vor einigen Jahren veröffentlichte Google die Coredumper-Bibliothek.
Übersicht
Die Coredumper-Bibliothek kann in Anwendungen kompiliert werden, um Core-Dumps des laufenden Programms zu erstellen – ohne sich zu beenden. Es unterstützt sowohl Single- als auch Multithread-Core-Dumps, auch wenn der Kernel keine Multithread-Core-Dateien unterstützt.
Coredumper wird unter den Bedingungen der BSD-Lizenz vertrieben.
Beispiel
Dies ist keineswegs ein vollständiges Beispiel; es gibt Ihnen einfach ein Gefühl dafür, wie die Coredumper-API aussieht.
#include <google/coredumper.h>
...
WriteCoreDump('core.myprogram');
/* Keep going, we generated a core file,
* but we didn't crash.
*/
Es ist nicht das, wonach Sie gefragt haben, aber vielleicht ist es sogar noch besser :)
Setzen von Signal Nummer 6 (SIGABRT
unter Linux) ist eine Möglichkeit, dies zu tun (beachten Sie jedoch, dass SIGABRT nicht erforderlich ist in allen POSIX-Implementierungen 6 sein, also möchten Sie vielleicht die SIGABRT
verwenden Wert selbst, wenn dies etwas anderes als Quick'n'Dirty-Debug-Code ist).
#include <signal.h>
: : :
raise (SIGABRT);
Anruf abort()
wird auch einen Core-Dump verursachen, und Sie können dies sogar ohne tun Beenden Sie Ihren Prozess, indem Sie fork()
aufrufen gefolgt von abort()
nur beim Kind - siehe diese Antwort für Details.