fix: libbacktrace implementation

This commit is contained in:
WerWolv
2026-02-12 21:57:37 +01:00
parent 060f0e6e56
commit b6a90aa89d
2 changed files with 10 additions and 11 deletions

View File

@@ -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)

View File

@@ -246,9 +246,11 @@ static std::mutex s_traceMutex;
#if __has_include(BACKTRACE_HEADER)
#include BACKTRACE_HEADER
#include <wolv/io/fs.hpp>
#include <backtrace.h>
#include <unistd.h>
#include <string>
#include <filesystem>
#include <linux/limits.h>
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<StackFrame> result;