mirror of
https://github.com/WerWolv/ImHex.git
synced 2026-03-27 23:37:05 -05:00
fix: libbacktrace implementation
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user