12 #include <boost/exception/diagnostic_information.hpp>
23 : stacktrace(NULL),n_stacktrace_frames(0)
31 : stacktrace(NULL), n_stacktrace_frames( other.n_stacktrace_frames)
36 char *ptr_dest = (
char *)(
stacktrace + n_stacktrace_frames);
40 while(*ptr_src!=0) *(ptr_dest++) = *(ptr_src++);
80 out <<
"** Stacktrace **" << endl;
85 if ( frame.find(
"boost") != string::npos
86 && frame.find(
"exception_detail") != string::npos
87 && frame.find(
"throw_exception") != string::npos
92 unsigned int out_i_frame=0;
95 unsigned int start_pos = frame.find(
"(")+1,
96 end_pos = frame.find(
"+");
97 string magled_fname = frame.substr( start_pos, end_pos-start_pos );
100 char *demagled_f_name;
103 demagled_f_name = abi::__cxa_demangle(magled_fname.c_str(), 0, 0, &status);
106 out << setw(3) << out_i_frame <<
" " << demagled_f_name << endl;
107 free(demagled_f_name);
109 out << setw(3) << out_i_frame <<
" " << magled_fname << endl;
112 if (magled_fname ==
"main")
break;
122 static std::string message(1024,
' ');
126 std::ostringstream converter;
128 converter << std::endl << std::endl;
129 converter <<
"--------------------------------------------------------" << std::endl;
130 converter <<
"Program Error: ";
133 converter <<
"\n** Diagnosting info **\n" ;
134 converter << boost::diagnostic_information_what( *
this );
136 converter <<
"--------------------------------------------------------" << std::endl;
138 message = converter.str();
139 return message.c_str();
141 }
catch (std::exception &exc) {
142 std::cerr <<
"*** Exception encountered in exception handling routines ***" << std::endl <<
"*** Message is " << std::endl
143 << exc.what() << std::endl <<
"*** Aborting! ***" << std::endl;
147 std::cerr <<
"*** Exception encountered in exception handling routines ***" << std::endl <<
"*** Aborting! ***"