Try falling back to backtrace_syminfo

This commit is contained in:
Jeremy 2023-07-02 21:55:39 -04:00
parent 8b101d04e9
commit 4dac00a87f
No known key found for this signature in database
GPG Key ID: 19AA8270105E8EB4

View File

@ -27,6 +27,14 @@ namespace cpptrace {
return 0; return 0;
} }
void syminfo_callback(void* data, uintptr_t address, const char* symbol, uintptr_t, uintptr_t) {
stacktrace_frame& frame = *static_cast<stacktrace_frame*>(data);
frame.address = address;
frame.line = 0;
frame.filename = "";
frame.symbol = symbol ? symbol : "";
}
void error_callback(void* data, const char* msg, int errnum) { void error_callback(void* data, const char* msg, int errnum) {
// nothing at the moment // nothing at the moment
fprintf(stderr, "Backtrace error %s %d %p\n", msg, errnum, data); 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 resolve_frame(void* addr) {
stacktrace_frame frame; stacktrace_frame frame;
frame.col = -1; frame.col = -1;
backtrace_pcinfo( if(!backtrace_pcinfo(
get_backtrace_state(), get_backtrace_state(),
reinterpret_cast<uintptr_t>(addr), reinterpret_cast<uintptr_t>(addr),
full_callback, full_callback,
error_callback, error_callback,
&frame &frame
)) {
backtrace_syminfo(
get_backtrace_state(),
reinterpret_cast<uintptr_t>(addr),
syminfo_callback,
error_callback,
&frame
); );
}
return frame; return frame;
} }
}; };