GNU/Linux >> Linux Esercitazione >  >> Linux

Come causare a livello di codice un core dump in C/C++

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.


Linux
  1. Come ottenere il nome utente in C/C++ in Linux?

  2. Come mai non viene creato alcun core dump quando un'applicazione ha impostato SUID?

  3. Come scaricare il traffico USB?

  4. Come impostare la posizione (e il nome) del file di dump principale?

  5. Come visualizzare il file Core (generale)

Come installare Windows PowerShell Core 6.0 in Linux

Come eseguire programmi C/C++ in Linux [Terminale ed Eclipse]

Come utilizzo GDB in Eclipse per il debug C/C++?

Attiva core/crash dump a livello di programmazione

Come analizzo il file core dump di un programma con GDB quando ha parametri da riga di comando?

Come elencare le dipendenze della libreria statica c/c++?