pretty_backtrace/
backtrace.rs1use findshlibs::Avma;
2
3use crate::{Address, FrameIndex};
4
5pub fn print_backtrace() {
6 let context = crate::locate_debuginfo::get_context();
7
8 let backtrace = backtrace::Backtrace::new_unresolved();
9 for (i, stack_frame) in backtrace.frames().iter().enumerate().map(|(i, frame)| (FrameIndex(i), frame)) {
10 let addr = if let Some(addr) = Address::from_avma(Avma(stack_frame.ip() as *const u8)) {
11 addr
12 } else {
13 if stack_frame.ip() as usize == 0 {
14 eprintln!("{} \x1b[2m<end of stack> (0)\x1b[0m", i);
15 } else {
16 eprintln!("{} \x1b[91m<could not get svma> ({:016p})\x1b[0m", i, stack_frame.ip());
17 }
18
19 continue;
20 };
21
22 crate::display_frame::display_frame(&context, i, addr);
23 }
24}