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;
*cras
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("\n");
printf("Process is aborting\n");
abort();
printf("Control not reaching here\n");
return 0;
}
use this approach wherever you want :)
You can use kill(2) to send signal.
#include <sys/types.h>
#include <signal.h>
int kill(pid_t pid, int sig);
So,
kill(getpid(), SIGSEGV);
As listed in the signal manpage, any signal with the action listed as 'core' will force a core dump. Some examples are:
SIGQUIT 3 Core Quit from keyboard
SIGILL 4 Core Illegal Instruction
SIGABRT 6 Core Abort signal from abort(3)
SIGFPE 8 Core Floating point exception
SIGSEGV 11 Core Invalid memory reference
Make sure that you enable core dumps:
ulimit -c unlimited
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);
Calling 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.