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;
}
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) {
// 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<uintptr_t>(addr),
full_callback,
error_callback,
&frame
);
)) {
backtrace_syminfo(
get_backtrace_state(),
reinterpret_cast<uintptr_t>(addr),
syminfo_callback,
error_callback,
&frame
);
}
return frame;
}
};