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; } };