XF65ACXZAPMLFX3BK5C4UKFBXZVMPOLP3SW5DVCUKEBTVCVT6FAAC backtrace_t backtrace;backtrace_symbols_t backtrace_symbols;backtrace = nasty_cast<backtrace_t, void*>(dlsym(RTLD_DEFAULT, "backtrace"));backtrace_symbols = nasty_cast<backtrace_symbols_t, void*>(dlsym(RTLD_DEFAULT, "backtrace_symbols"));if (!backtrace || !backtrace_symbols){fprintf(stderr, "Couldn't get a stack trace." EOL);fprintf(file, "Couldn't get a stack trace." EOL);return;}
backtrace_t backtrace;backtrace_symbols_t backtrace_symbols;backtrace = nasty_cast<backtrace_t, void*>(dlsym(RTLD_DEFAULT, "backtrace"));backtrace_symbols = nasty_cast<backtrace_symbols_t, void*>(dlsym(RTLD_DEFAULT, "backtrace_symbols"));if (!backtrace || !backtrace_symbols){fprintf(stderr, "Couldn't get a stack trace." EOL);fprintf(file, "Couldn't get a stack trace." EOL);return;}
// Now we prettify the printout to even show demangled C++ function names.std::string bt = "";for (int i = 0; i < num_frames; i++) {
// Now we prettify the printout to even show demangled C++ function names.std::string bt = "";for (int i = 0; i < num_frames; i++) {
char *addr = ::strstr(symbols[i], "0x");char *mangled = ::strchr(addr, ' ') + 1;char *offset = ::strchr(addr, '+');char *postmangle = ::strchr(mangled, ' ');if (mangled) *(mangled - 1) = 0;bt += addr;int status;bt += ": ";if (addr && mangled) {if (postmangle)*postmangle = '\0';char *realname = abi::__cxa_demangle(mangled, 0, 0, &status);if (realname) {bt += realname;} else {bt += mangled;}bt += " ";bt += offset;free(realname);}
char *addr = ::strstr(symbols[i], "0x");char *mangled = ::strchr(addr, ' ') + 1;char *offset = ::strchr(addr, '+');char *postmangle = ::strchr(mangled, ' ');if (mangled)*(mangled - 1) = 0;bt += addr;int status;bt += ": ";if (addr && mangled){if (postmangle)*postmangle = '\0';char *realname = abi::__cxa_demangle(mangled, 0, 0, &status);if (realname)bt += realname;elsebt += mangled;bt += " ";bt += offset;free(realname);}
bt += symbols[i];int status;/* extract the identifier from symbols[i]. It's inside of parens. */char * firstparen = ::strchr(symbols[i], '(');char * lastparen = ::strchr(symbols[i], '+');if (firstparen != 0 && lastparen != 0 && firstparen < lastparen) {bt += ": ";*lastparen = '\0';char * realname = abi::__cxa_demangle(firstparen + 1, 0, 0, &status);if (realname != NULL) {bt += realname;}free(realname);}
bt += symbols[i];int status;// Extract the identifier from symbols[i]. It's inside of parens.char *firstparen = ::strchr(symbols[i], '(');char *lastparen = ::strchr(symbols[i], '+');if (firstparen != 0 && lastparen != 0 && firstparen < lastparen){bt += ": ";*lastparen = '\0';char *realname = abi::__cxa_demangle(firstparen + 1, 0, 0, &status);if (realname != NULL)bt += realname;free(realname);}