17 #ifndef USGOV_49d1d337b2a0fc5c7d3988c513a828859517ba9520f1dbc3182719bf4ee878d6 
   18 #define USGOV_49d1d337b2a0fc5c7d3988c513a828859517ba9520f1dbc3182719bf4ee878d6 
   25 #if defined(__GLIBC__) 
   32 static inline void print_stacktrace_release(std::ostream& out, 
unsigned int max_frames = 10) {
 
   33     out << 
"stack trace:" << std::endl;
 
   36     void* addrlist[max_frames+1];
 
   39     int addrlen = backtrace(addrlist, 
sizeof(addrlist) / 
sizeof(
void*));
 
   42         out << 
"  <empty, possibly corrupt>" << std::endl;
 
   48     char** symbollist = backtrace_symbols(addrlist, addrlen);
 
   51     size_t funcnamesize = 256;
 
   52     char* funcname = (
char*)malloc(funcnamesize);
 
   56     for (
int i = 1; i < addrlen; i++) {
 
   57     char *begin_name = 0, *begin_offset = 0, *end_offset = 0;
 
   61     for (
char *p = symbollist[i]; *p; ++p)
 
   67         else if (*p == 
')' && begin_offset) {
 
   73     if (begin_name && begin_offset && end_offset && begin_name < begin_offset) {
 
   75         *begin_offset++ = 
'\0';
 
   78         char* ret = abi::__cxa_demangle(begin_name, funcname, &funcnamesize, &status);
 
   81             out << 
"  " << symbollist[i] << 
" : " << funcname << 
"+" << begin_offset << std::endl;
 
   84             out << 
"  " << symbollist[i] << 
" : " << begin_name << 
"()+" << begin_offset << std::endl;
 
   88         out << 
"  " << symbollist[i] << std::endl;
 
   97     static inline void print_stacktrace(std::ostream& out, 
unsigned int max_frames = 10) {
 
   98             print_stacktrace_release(out, max_frames);
 
  101     #define print_stacktrace (void)sizeof 
  104     #define print_stacktrace (void)sizeof