一种在嵌入式上可行的调试方法,截获SIGSEGV信号,并作backtrace()处理,把 调用栈信息打印出来。

#include <signal.h>
#include <execinfo.h>

int main(void)
{
    signal(SIGSEGV,DebugBacktrace);
}

static void  DebugBacktrace(int signal)
{
#define SIZE 100
    void *array[SIZE];
    int size,i;
    char **strings;
    char buf[50];

    fprintf(stderr,"\nSegmentation fault \n");
    size = backtrace(array,SIZE);
    fprintf(stderr,"Backtrace (%d deep):\n",size);                                                                              
    strings = backtrace_symbols(array,size);
    for(i = 0;i<size;i++)
    {
        fprintf(stderr,"%d: %s \n",i,strings[i]);
    }
    free(strings);
    exit(-1);
    return ;
}
#=> 会将调用栈根据需要显示出来

比起core来,不需要占用很大的空间,但是貌似只能回溯调用栈,无法回溯当时的内存。