QString CrashHandler::getStacktrace() { #ifdef _WIN32 //StackTracer tracer; //tracer.runStackTracerForAllThreads(); //return tracer.theOutput(); //dbg::stack s; //std::stringstream out; //std::copy(s.begin(), s.end(), std::ostream_iterator<dbg::stack_frame>(out, "\n")); std::string stack; GetStackWalk(stack); return QString::fromStdString(stack); #elif (defined(__linux__) && !defined(__ANDROID__)) || defined(__APPLE__) void *array[401]; int size; char **strings; size = backtrace(array, 400); strings = backtrace_symbols(array, size); QString bkTrace(""); for(int j = 0; j < size; j++) bkTrace += QString(strings[j]) + "\n"; return bkTrace; #else return QString(""); #endif }
static std::string getStacktrace() { #if defined(_WIN32) //StackTracer tracer; //tracer.runStackTracerForAllThreads(); //return tracer.theOutput(); //dbg::stack s; //std::stringstream out; //std::copy(s.begin(), s.end(), std::ostream_iterator<dbg::stack_frame>(out, "\n")); std::string stack; GetStackWalk(stack); return stack; #elif (defined(__linux__) && !defined(__ANDROID__) || defined(__APPLE__)) void *array[400]; int size; char **strings; D_pLogDebug("Requesting backtrace..."); size = backtrace(array, 400); D_pLogDebug("Converting..."); strings = backtrace_symbols(array, size); D_pLogDebug("Initializing std::string..."); std::string bkTrace(""); D_pLogDebug("Filling std::string..."); for(int j = 0; j < size; j++) { bkTrace.append(strings[j]); bkTrace.push_back('\n'); } D_pLogDebug("DONE!"); return bkTrace; #else return std::string("<Stack trace not supported for this platform!>"); #endif }