Alcuni anni fa, Google ha rilasciato la libreria coredumper.
Panoramica
La libreria coredumper può essere compilata in applicazioni per creare core dump del programma in esecuzione, senza terminare. Supporta core dump sia single che multi-thread, anche se il kernel non supporta nativamente i file core multi-thread.
Coredumper è distribuito secondo i termini della licenza BSD.
Esempio
Questo non è affatto un esempio completo; ti dà semplicemente un'idea di come appare l'API del coredumper.
#include <google/coredumper.h> ... WriteCoreDump('core.myprogram'); /* Keep going, we generated a core file, * but we didn't crash. */
Non è quello che stavi chiedendo, ma forse è anche meglio :)
Innalzamento del segnale numero 6 (SIGABRT
in Linux) è un modo per farlo (anche se tieni presente che SIGABRT non è richiesto essere 6 in tutte le implementazioni POSIX quindi potresti voler usare SIGABRT
value stesso se questo è qualcosa di diverso dal codice di debug quick'n'dirty).
#include <signal.h>
: : :
raise (SIGABRT);
Chiamando abort()
causerà anche un core dump, e puoi farlo anche senza terminare il processo chiamando fork()
seguito da abort()
solo nel bambino - vedi questa risposta per i dettagli.