diff --git a/main/gui/include/stacktrace.hpp b/main/gui/include/stacktrace.hpp index d0b8250e0..5a76b7b96 100644 --- a/main/gui/include/stacktrace.hpp +++ b/main/gui/include/stacktrace.hpp @@ -15,6 +15,11 @@ namespace hex::stacktrace { void initialize(); - std::vector getStackTrace(); + struct StackTraceResult { + std::vector stackFrames; + std::string implementationName; + }; + + StackTraceResult getStackTrace(); } \ No newline at end of file diff --git a/main/gui/source/crash_handlers.cpp b/main/gui/source/crash_handlers.cpp index 76270e637..ad05b1c21 100644 --- a/main/gui/source/crash_handlers.cpp +++ b/main/gui/source/crash_handlers.cpp @@ -63,7 +63,9 @@ namespace hex::crash { } static void printStackTrace() { - for (const auto &stackFrame : stacktrace::getStackTrace()) { + auto stackTraceResult = stacktrace::getStackTrace(); + log::fatal("Printing stacktrace using implementation '{}'", stackTraceResult.implementationName); + for (const auto &stackFrame : stackTraceResult.stackFrames) { if (stackFrame.line == 0) log::fatal(" ({}) | {}", stackFrame.file, stackFrame.function); else @@ -214,4 +216,4 @@ namespace hex::crash { for (auto signal : Signals) std::signal(signal, SIG_DFL); } -} \ No newline at end of file +} diff --git a/main/gui/source/stacktrace.cpp b/main/gui/source/stacktrace.cpp index 45c3e4307..cdd8d0838 100644 --- a/main/gui/source/stacktrace.cpp +++ b/main/gui/source/stacktrace.cpp @@ -29,7 +29,7 @@ namespace { } - std::vector getStackTrace() { + StackTraceResult getStackTrace() { std::vector stackTrace; HANDLE process = GetCurrentProcess(); @@ -100,7 +100,7 @@ namespace { SymCleanup(process); - return stackTrace; + return StackTraceResult{ stackTrace, "StackWalk" }; } } @@ -119,7 +119,7 @@ namespace { } - std::vector getStackTrace() { + StackTraceResult getStackTrace() { static std::vector result; std::array addresses = {}; @@ -135,7 +135,7 @@ namespace { result.push_back(StackFrame { std::move(fileName), std::move(demangledName), 0 }); } - return result; + return StackTraceResult{ result, "execinfo" }; } } @@ -162,7 +162,7 @@ namespace { } } - std::vector getStackTrace() { + StackTraceResult getStackTrace() { static std::vector result; result.clear(); @@ -180,7 +180,7 @@ namespace { } - return result; + return StackTraceResult{ result, "backtrace" }; } } @@ -192,8 +192,12 @@ namespace { namespace hex::stacktrace { void initialize() { } - std::vector getStackTrace() { return { StackFrame { "??", "Stacktrace collecting not available!", 0 } }; } - + StackTraceResult getStackTrace() { + return StackTraceResult { + {StackFrame { "??", "Stacktrace collecting not available!", 0 }}, + "none" + }; + } } #endif \ No newline at end of file