The answer: set the sigaction with flag SA_RESETHAND
and just return from the handler. The same instruction occurs again, causing a segmentation fault again and invoking the default handler.
Linux: handling a segmentation fault and getting a core dump
-
30-05-2022 - |
Question
When my application crashes with a segmentation fault I'd like to get a core dump from the system. I do that by configuring before hand
ulimit -c unlimited
I would also like to have an indication in my application logs that a segmentation fault has occured. I do that by using sigaction()
. If I do that however, the signal does not reach its default handling and a core dump is not saved.
How can I have both the system core dump an a log line from my own signal handler at the same time?
Solution 2
OTHER TIPS
- Overwrite the default signal handler for
SIGSEGV
to call your custom logging function. - After it is logged, restore and trigger the default handler that will create the core dump.
Here is a sample program using signal
:
void sighandler(int signum)
{
myLoggingFunction();
// this is the trick: it will trigger the core dump
signal(signum, SIG_DFL);
kill(getpid(), signum);
}
int main()
{
signal(SIGSEGV, sighandler);
// ...
}
The same idea should also work with sigaction
.
Source: How to handle SIGSEGV, but also generate a core dump
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow