Linux下程序主动生成core

通过core文件可以方便的获取程序当前的内存映像,这对大型程序的debug至关重要,一般情况下程序收到特定信号会产生core文件,我们可以利用这点让程序在出现某些严重异常时主动生成corefile。
其基本原理是,fork一个子进程,子进程对自己发产生corefile的异常信号,子进程退出,系统为子进程生成corefile,代码如下:

...捕获某严重异常,在异常处理时生成core文件
if ( !fork() ) {
*((char*)0) = 1; //<利用段错误信号产生corefile
}


值得注意的是,如上代码并不能产生core文件,因为父进程并未调用wait等待子进程,子进程信息依然被OS保留。
因此正确的代码如下:

...捕获某严重异常,在异常处理时生成core文件
if ( !fork() ) {
*((char*)0) = 1; //<利用段错误信号产生corefile
}
waitpid(-1, NULL, 0);

Comments

  1. 抱歉,没有找到aboutme页面的评论,另外,没有意识到wordpress的回复默认有邮件通知的。

    ReplyDelete

Post a Comment

Popular posts from this blog

socket close shutdown函数区别

批量在文件头插入

hash表取模技巧