Try falling back to backtrace_syminfo
This commit is contained in:
parent
8b101d04e9
commit
4dac00a87f
@ -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;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user