README
objdump -s -d segfault >segfault.dis
gcc -O0 -g -rdynamic -o segfault segfault.c
参照:韦东山应用开发完全手册高级篇
segfault.c
#include <stdio.h>
#include <signal.h>
#include <execinfo.h>
void A(int);
void B(int);
void C(int);
void DebugBacktrace(void);
void A(int a)
{
printf("%d:A call B\n",a);
B(2);
}
void B(int b)
{
printf("%d:B call C\n",b);
C(3);
}
void C(int c)
{
char *p = (char *)c;
*p = 'A';
printf("%d:function C\n",c);
}
void DebugBacktrace(void)
{
#define SIZE 100
void *array[SIZE];
int size,i;
char **strings;
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);
}
int main(int argc,char **argv){
char a;
signal(SIGSEGV,DebugBacktrace);
A(1);
C(&a);
return 0;
}