// StackTrace.cpp // Implements the functions to print current stack traces #include "Globals.h" #include "StackTrace.h" #ifdef _WIN32 #include "WinStackWalker.h" #else #ifdef __GLIBC__ #include #endif #include #endif void PrintStackTrace(void) { #ifdef _WIN32 class PrintingStackWalker: public WinStackWalker { virtual void OnOutput(LPCSTR szText) override { std::fputs(szText, stdout); } } sw; sw.ShowCallstack(); #else #ifdef __GLIBC__ // Use the backtrace() function to get and output the stackTrace: // Code adapted from https://stackoverflow.com/questions/77005/how-to-generate-a-stacktrace-when-my-gcc-c-app-crashes void * stackTrace[30]; auto numItems = backtrace(stackTrace, ARRAYCOUNT(stackTrace)); backtrace_symbols_fd(stackTrace, numItems, STDERR_FILENO); #endif #endif }