50 exception_stream <<
"\nStack trace:\n";
51 exception_stream <<
"------------\n";
54 void* addrlist[max_frames + 1];
57 int addrlen = backtrace(addrlist,
sizeof(addrlist) /
sizeof(
void*));
61 exception_stream <<
"\n<empty stack trace, possibly corrupt>\n";
67 char** symbollist = backtrace_symbols(addrlist, addrlen);
70 size_t funcnamesize = 256;
71 char* funcname = (
char*)malloc(funcnamesize);
74 std::stringstream address_stream;
78 for (
int i = 1;
i < addrlen;
i++)
81 char *begin_absolute = 0, *end_absolute = 0;
85 for (
char*
p = symbollist[
i]; *
p; ++
p)
87 if (*
p ==
'[') begin_absolute =
p;
88 else if (*
p ==
']' && begin_absolute)
97 *begin_absolute++ =
'\0';
102 <<
" " << begin_absolute <<
"\n";
106 address_stream <<
"addr2line -e [name_of_executable] " << begin_absolute
113 char *begin_name = 0, *begin_offset = 0, *end_offset = 0;
117 for (
char*
p = symbollist[
i]; *
p; ++
p)
119 if (*
p ==
'(') begin_name =
p;
122 else if (*
p ==
')' && begin_offset)
129 if (begin_name && begin_offset && end_offset && begin_name < begin_offset)
131 *begin_name++ =
'\0';
132 *begin_offset++ =
'\0';
141 abi::__cxa_demangle(begin_name, funcname, &funcnamesize, &status);
147 exception_stream << symbollist[
i] <<
" : " << funcname <<
"+"
148 << begin_offset << std::endl;
157 exception_stream << symbollist[
i] <<
" : " << begin_name <<
"+"
158 << begin_offset << std::endl;
165 exception_stream << symbollist[
i] << std::endl;
169 exception_stream <<
"\nHere are the commmands to obtain the line numbers:\n";
171 exception_stream <<
"--------------------------------------------------\n";
172 exception_stream << address_stream.str() << std::endl;
177 exception_stream <<
"\nNOTE: Replace [name_of_executable] by the actual\n"
178 <<
" name of the executable. I would have inserted\n"
179 <<
" this for you if you had called \n\n"
180 <<
" CommandLineArgs::setup(argc,argv);\n\n"
181 <<
" in your driver code...\n\n";
int i
Definition: BiCGSTAB_step_by_step.cpp:9
float * p
Definition: Tutorial_Map_using.cpp:9
Eigen::DenseIndex ret
Definition: level1_cplx_impl.h:43
char ** Argv
Arguments themselves.
Definition: oomph_utilities.cc:410
int Argc
Number of arguments + 1.
Definition: oomph_utilities.cc:407