1.重定向段错误信号的接收
signal(SIGSEGV, recvSignal);
2.编写段错误接收函数
void recvSignal(int sig)
{
printf("SIGSEGV falut !!!!!\n");
void *data[16] = {0};
char **str;
int size;
size = backtrace(data, 16);
str = backtrace_symbols(data, size);
if(str == NULL)
{
printf("backtrace_symbols is null!\n");
exit(EXIT_FAILURE);
}
for(int i = 0; i < size; i++)
{
printf("%d: %s\n", i, str[i]);
}
free(str);
str = NULL;
exit(0);
}
3.所需头文件
#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdint.h>
#include <signal.h>
#include <setjmp.h>
#include <execinfo.h>
#include <unistd.h>
4.查看段错误具体行号
arm-linux-addr2line -e xxx.out 0x400b04