diff --git a/lib/trace/CMakeLists.txt b/lib/trace/CMakeLists.txt index 814947f95..256a4bf82 100644 --- a/lib/trace/CMakeLists.txt +++ b/lib/trace/CMakeLists.txt @@ -60,7 +60,7 @@ if (NOT IMHEX_DISABLE_STACKTRACE) else () find_package(Backtrace) if (${Backtrace_FOUND}) - message(STATUS "Backtrace enabled! Header: ${Backtrace_HEADER}") + message(STATUS "Backtrace enabled! Header: ${Backtrace_HEADER} Library: ${Backtrace_LIBRARY}") if (Backtrace_HEADER STREQUAL "backtrace.h") target_link_libraries(tracing ${LIBIMHEX_LIBRARY_TYPE_PRIVATE} ${Backtrace_LIBRARY}) @@ -68,7 +68,7 @@ if (NOT IMHEX_DISABLE_STACKTRACE) target_compile_definitions(tracing ${LIBIMHEX_LIBRARY_TYPE_PRIVATE} BACKTRACE_HEADER=<${Backtrace_HEADER}>) target_compile_definitions(tracing ${LIBIMHEX_LIBRARY_TYPE_PRIVATE} HEX_HAS_BACKTRACE) elseif (Backtrace_HEADER STREQUAL "execinfo.h") - target_link_libraries(tracing ${LIBIMHEX_LIBRARY_TYPE_PRIVATE} ${Backtrace_LIBRARY}) + target_link_libraries(tracing ${LIBIMHEX_LIBRARY_TYPE_PRIVATE} ${Backtrace_LIBRARY}) target_include_directories(tracing ${LIBIMHEX_LIBRARY_TYPE_PRIVATE} ${Backtrace_INCLUDE_DIR}) target_compile_definitions(tracing ${LIBIMHEX_LIBRARY_TYPE_PRIVATE} BACKTRACE_HEADER=<${Backtrace_HEADER}>) target_compile_definitions(tracing ${LIBIMHEX_LIBRARY_TYPE_PRIVATE} HEX_HAS_EXECINFO) diff --git a/lib/trace/source/stacktrace.cpp b/lib/trace/source/stacktrace.cpp index cf018bdb3..0c5c013e3 100644 --- a/lib/trace/source/stacktrace.cpp +++ b/lib/trace/source/stacktrace.cpp @@ -246,9 +246,11 @@ static std::mutex s_traceMutex; #if __has_include(BACKTRACE_HEADER) - #include BACKTRACE_HEADER - - #include + #include + #include + #include + #include + #include namespace hex::trace { @@ -256,16 +258,13 @@ static std::mutex s_traceMutex; void initialize() { - std::lock_guard lock(s_traceMutex); + std::scoped_lock lock(s_traceMutex); - if (auto executablePath = wolv::io::fs::getExecutablePath(); executablePath.has_value()) { - static std::string path = executablePath->string(); - s_backtraceState = backtrace_create_state(path.c_str(), 1, [](void *, const char *, int) { }, nullptr); - } + s_backtraceState = backtrace_create_state(nullptr, 1, [](void *, const char *, int) { }, nullptr); } StackTraceResult getStackTrace() { - std::lock_guard lock(s_traceMutex); + std::scoped_lock lock(s_traceMutex); static std::vector result;