前文转了两篇简单的linux下进程crash后生成core文件的文章,包括信号、core机制的简述、没有生成core文件原因的排查,以及利用core文件调试定位crash point。
但我遇到的问题在前面的文章中还是无解。后来测试后发现,是因为代码中安装了
一:
但我遇到的问题在前面的文章中还是无解。后来测试后发现,是因为代码中安装了
SIGSEGV信号处理函数,在信号处理函数中打印堆栈信息。所以这时进程收到
SIGSEGV后,系统不再自动生成core文件。所以问题变成:手动处理
SIGSEGV信号后,怎么样让系统还生成core文件?或者:
How to handle SICSEGV, but also generate a core dump?
网上查了会,收到3种相关解决方案。
一:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
void sighandler(int signum)
{
printf("Process %d got signal %d\n", getpid(), signum);
signal(signum, SIG_DFL);
kill(getpid(), signum);
}
int main()
{
signal(SIGSEGV, sighandler);
printf("Process %d waits for someone to send it SIGSEGV\n",<