I would like to force a core dump at a specific location in my C++ application.
I know I can do it by doing something like:
int * crash = NULL; *crash = 1;
But I would like to know if there is a cleaner way?
I am using Linux by the way.
Raising of signal number 6 (
SIGABRT in Linux) is one way to do it (though keep in mind that SIGABRT is not required to be 6 in all POSIX implementations so you may want to use the
SIGABRT value itself if this is anything other than quick'n'dirty debug code).
#include <signal.h> : : : raise (SIGABRT);
abort() will also cause a core dump, and you can even do this without terminating your process by calling
fork() followed by
abort() in the child only - see this answer for details.
A few years ago, Google released the coredumper library.
The coredumper library can be compiled into applications to create core dumps of the running program -- without terminating. It supports both single- and multi-threaded core dumps, even if the kernel does not natively support multi-threaded core files.
Coredumper is distributed under the terms of the BSD License.
This is by no means a complete example; it simply gives you a feel for what the coredumper API looks like.
#include <google/coredumper.h> ... WriteCoreDump('core.myprogram'); /* Keep going, we generated a core file, * but we didn't crash. */
It's not what you were asking for, but maybe it's even better :)