]> git.proxmox.com Git - cargo.git/blob - vendor/backtrace-0.3.3/examples/raw.rs
New upstream version 0.23.0
[cargo.git] / vendor / backtrace-0.3.3 / examples / raw.rs
1 extern crate backtrace;
2
3 fn main() {
4 foo();
5 }
6
7 fn foo() { bar() }
8 fn bar() { baz() }
9 fn baz() { print() }
10
11 #[cfg(target_pointer_width = "32")] const HEX_WIDTH: usize = 10;
12 #[cfg(target_pointer_width = "64")] const HEX_WIDTH: usize = 20;
13
14 fn print() {
15 let mut cnt = 0;
16 backtrace::trace(|frame| {
17 let ip = frame.ip();
18 print!("frame #{:<2} - {:#02$x}", cnt, ip as usize, HEX_WIDTH);
19 cnt += 1;
20
21 let mut resolved = false;
22 backtrace::resolve(frame.ip(), |symbol| {
23 if !resolved {
24 resolved = true;
25 } else {
26 print!("{}", vec![" "; 7 + 2 + 3 + HEX_WIDTH].join(""));
27 }
28
29 if let Some(name) = symbol.name() {
30 print!(" - {}", name);
31 } else {
32 print!(" - <unknown>");
33 }
34 if let Some(file) = symbol.filename() {
35 if let Some(l) = symbol.lineno() {
36 print!("\n{:13}{:4$}@ {}:{}", "", "", file.display(), l,
37 HEX_WIDTH);
38 }
39 }
40 println!("");
41
42 });
43 if !resolved {
44 println!(" - <no info>");
45 }
46 true // keep going
47 });
48 }