26 #if defined(__linux__)
41 std::string result=mangledName;
43 size_t parenthesisPos = result.find_first_of(
'(');
44 if (parenthesisPos == std::string::npos)
return result;
45 size_t endPos = result.find_first_of(
"+", parenthesisPos);
46 if (endPos == std::string::npos) endPos = result.find_first_of(
")", parenthesisPos);
47 std::string head = result.substr(0,parenthesisPos+1);
48 std::string tail = result.substr(endPos);
49 std::string mangled = result.substr(parenthesisPos+1, endPos-parenthesisPos-1);
50 int demangleError = 0;
51 char * demangled = abi::__cxa_demangle(mangled.c_str(),0,0,&demangleError);
52 if (!demangleError && demangled)
53 result = head+demangled+tail;
54 if (demangled) free(demangled);
61 #if defined(__linux__)
67 if ((num_entries = backtrace(bt_array, 100)) < 0) {
68 os <<
" Unable to generate a backtrace" << std::endl;
72 if ((bt_strings = backtrace_symbols(bt_array, num_entries)) ==
NULL) {
73 os <<
" Unable to adquire symbols names for the backtrace" << std::endl;
77 os <<
"\n Backtrace:\n" << std::endl;
78 for (
int i = 0; i < num_entries; i++) {
79 os <<
"[" << i <<
"] " <<
demangleSymbol(bt_strings[i]) << std::endl;
83 os <<
" Unable to adquire symbols names for the backtrace" << std::endl;
97 std::cerr <<
"##########################################################" << std::endl;
98 std::cerr <<
"################### ASSERTION FAILED #####################" << std::endl;
99 std::cerr <<
"##########################################################" << std::endl;
100 std::cerr <<
"At file " << filename <<
" line " << lineNumber << std::endl;
101 std::cerr << message << std::endl;
132 std::cerr <<
"####### WARNING: At file " << filename <<
" line " << lineNumber << std::endl;
133 std::cerr <<
"\033[31m" << message <<
"\033[0m" << std::endl;
149 #if 0 // defined(__linux__)
150 class SystemSignalTrapper
153 sighandler_t _oldHandler;
155 SystemSignalTrapper(
int signal, sighandler_t handler) :
158 _oldHandler = std::signal(signal, handler);
160 ~SystemSignalTrapper()
162 std::signal(_signal, _oldHandler);
165 void segvSignalHandler(
int myInt)
167 std::cerr << std::endl;
168 std::cerr <<
"##########################################################" << std::endl;
169 std::cerr <<
"#################### BAD MEMORY ACCES ####################" << std::endl;
170 std::cerr <<
"##########################################################" << std::endl;
175 static SystemSignalTrapper segvSignalTrapper(SIGSEGV,segvSignalHandler);
176 #endif //defined linux