23 cout <<
"Backtrace... " << endl;
24 int traceCount = backtrace(traces,20);
25 char **traceStrings = backtrace_symbols(traces, traceCount);
27 if(traceStrings != NULL)
29 for(
int x = 0; x < traceCount; x++)
31 if (traceStrings[x] == NULL) {
break; }
33 string s(traceStrings[x]);
34 size_t funcNameBegin = s.find(
"(");
35 size_t funcNameEnd = s.find(
"+");
36 if (funcNameBegin != string::npos &&
37 funcNameEnd != string::npos)
39 string funcNameMangled(s.begin()+funcNameBegin+1,
40 s.begin()+funcNameEnd);
42 string fileName(s.begin(),s.begin()+funcNameBegin);
44 string offset(s.begin() + funcNameEnd, s.end());
46 char *realName = abi::__cxa_demangle(funcNameMangled.c_str(), 0, 0, &status);
48 std::cout << x <<
" : " << realName << endl;
52 std::cout << x <<
" : " << s << endl;
55 cout <<
"Backtrace...end " << endl;
CException(const string &what)