From 4dac00a87f749752ca4a042c55806e71550da2e0 Mon Sep 17 00:00:00 2001 From: Jeremy <51220084+jeremy-rifkin@users.noreply.github.com> Date: Sun, 2 Jul 2023 21:55:39 -0400 Subject: [PATCH] Try falling back to backtrace_syminfo --- src/symbols/symbols_with_libbacktrace.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/symbols/symbols_with_libbacktrace.cpp b/src/symbols/symbols_with_libbacktrace.cpp index ceb82cc..8c90c03 100644 --- a/src/symbols/symbols_with_libbacktrace.cpp +++ b/src/symbols/symbols_with_libbacktrace.cpp @@ -27,6 +27,14 @@ namespace cpptrace { return 0; } + void syminfo_callback(void* data, uintptr_t address, const char* symbol, uintptr_t, uintptr_t) { + stacktrace_frame& frame = *static_cast(data); + frame.address = address; + frame.line = 0; + frame.filename = ""; + frame.symbol = symbol ? symbol : ""; + } + void error_callback(void* data, const char* msg, int errnum) { // nothing at the moment fprintf(stderr, "Backtrace error %s %d %p\n", msg, errnum, data); @@ -48,13 +56,21 @@ namespace cpptrace { stacktrace_frame resolve_frame(void* addr) { stacktrace_frame frame; frame.col = -1; - backtrace_pcinfo( + if(!backtrace_pcinfo( get_backtrace_state(), reinterpret_cast(addr), full_callback, error_callback, &frame - ); + )) { + backtrace_syminfo( + get_backtrace_state(), + reinterpret_cast(addr), + syminfo_callback, + error_callback, + &frame + ); + } return frame; } };