#include<stdio.h>
#include<signal.h>
extern void my_backtrace();
extern int fun();
int main()
{
signal(SIGSEGV,my_backtrace);
fun();
return 0;
}
#include<execinfo.h>
#include<stdio.h>
#include<signal.h>
#include<stdio.h>
#include<stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#define BACKTRACESIZE 10
void my_backtrace()
{
printf("base page ***\r\n");
char buf[64] = {0};
sprintf(buf, "cat /proc/%d/maps", getpid());
system((const char*)buf);
void* buffer[BACKTRACESIZE+1];
int nptrs;
nptrs = backtrace(buffer,BACKTRACESIZE);
printf("nptrs=%x\n", nptrs);
char** string;
string = backtrace_symbols(buffer, nptrs);
if(NULL == string)
{
return ;
}
for(int i = 0; i < nptrs; i++)
{
printf("%s\r\n", string[i]);
}
free(string);
string = NULL;
signal(SIGSEGV,SIG_DFL);
raise(SIGSEGV);
return ;