在Linux服务开发过程中,经常会遇到各种问题,其中一种快速高效解决问题的策略就是:当服务处理异常时,操作系统自动产生Core文件,通过GDB调试工具分析Core文件,还原异常发生时服务的函数栈调用层次,继而快速的分析出导致异常发生的逻辑代码。Core文件,本质就是服务发生异常时的内存映像,如果服务占用的内存空间非常大,尤其是在64位操作系统下,例如占用20G的内存,写入磁盘Core文件的耗时会比较久,或者服务频繁异常导致写入数量非常大的Core文件,占用非常大的磁盘空间。以上两种情况显然不适合产生Core文件,所以这里介绍一种获取Core发生的函数栈调用情况的方法。
主要原理为:注册段错误的信号处理函数,在信号处理函数中,通过backtrace来获取当前服务的函数栈调用情况。
示例代码如下(test_core.c):
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <execinfo.h>
void Dump()
{
void *DumpArray[25];
int Size &#