summaryrefslogtreecommitdiffstats
path: root/vendor/backtrace/examples/raw.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
commit698f8c2f01ea549d77d7dc3338a12e04c11057b9 (patch)
tree173a775858bd501c378080a10dca74132f05bc50 /vendor/backtrace/examples/raw.rs
parentInitial commit. (diff)
downloadrustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.tar.xz
rustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.zip
Adding upstream version 1.64.0+dfsg1.upstream/1.64.0+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/backtrace/examples/raw.rs')
-rw-r--r--vendor/backtrace/examples/raw.rs52
1 files changed, 52 insertions, 0 deletions
diff --git a/vendor/backtrace/examples/raw.rs b/vendor/backtrace/examples/raw.rs
new file mode 100644
index 000000000..d96a127a2
--- /dev/null
+++ b/vendor/backtrace/examples/raw.rs
@@ -0,0 +1,52 @@
+fn main() {
+ foo();
+}
+
+fn foo() {
+ bar()
+}
+fn bar() {
+ baz()
+}
+fn baz() {
+ print()
+}
+
+#[cfg(target_pointer_width = "32")]
+const HEX_WIDTH: usize = 10;
+#[cfg(target_pointer_width = "64")]
+const HEX_WIDTH: usize = 20;
+
+fn print() {
+ let mut cnt = 0;
+ backtrace::trace(|frame| {
+ let ip = frame.ip();
+ print!("frame #{:<2} - {:#02$x}", cnt, ip as usize, HEX_WIDTH);
+ cnt += 1;
+
+ let mut resolved = false;
+ backtrace::resolve(frame.ip(), |symbol| {
+ if !resolved {
+ resolved = true;
+ } else {
+ print!("{}", vec![" "; 7 + 2 + 3 + HEX_WIDTH].join(""));
+ }
+
+ if let Some(name) = symbol.name() {
+ print!(" - {}", name);
+ } else {
+ print!(" - <unknown>");
+ }
+ if let Some(file) = symbol.filename() {
+ if let Some(l) = symbol.lineno() {
+ print!("\n{:13}{:4$}@ {}:{}", "", "", file.display(), l, HEX_WIDTH);
+ }
+ }
+ println!("");
+ });
+ if !resolved {
+ println!(" - <no info>");
+ }
+ true // keep going
+ });
+}