30 fprintf(out,
"Stack trace:\n");
32 void* addrlist[maxFrames + 1];
34 unsigned int addrlen = backtrace( addrlist,
sizeof( addrlist ) /
sizeof(
void* ));
36 fprintf( out,
" \n" );
42 char** symbollist = backtrace_symbols( addrlist, addrlen );
43 size_t funcnamesize = 1024;
47 for (
unsigned int i = 4; i < addrlen; i++ ) {
48 char* begin_name = NULL;
49 char* begin_offset = NULL;
50 char* end_offset = NULL;
52 for (
char* p = symbollist[i]; *p; ++p ) {
57 else if ( *p ==
')' && ( begin_offset || begin_name ))
60 if ( begin_name && end_offset && ( begin_name < end_offset )) {
64 *begin_offset++ =
'\0';
69 char* ret = abi::__cxa_demangle( begin_name, funcname,
70 &funcnamesize, &status );
71 char* fname = begin_name;
75 fprintf( out,
" %-30s ( %-40s + %-6s) %s\n",
76 symbollist[i], fname, begin_offset, end_offset );
78 fprintf( out,
" %-30s ( %-40s %-6s) %s\n",
79 symbollist[i], fname,
"", end_offset );
83 fprintf(out,
" %-40s\n", symbollist[i]);
90 const char* name = NULL;
106 fprintf( stderr,
"Caught signal %d (%s)\n", signum, name );
108 fprintf( stderr,
"Caught signal %d\n", signum );
const std::string CrashLogPath
static void handleSignal(int signum)
static void printStackTrace(FILE *out=stderr, unsigned int maxFrames=63)