Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Trim backtraces based on panic location #60

Open
Thomasdezeeuw opened this issue Oct 16, 2022 · 1 comment
Open

Trim backtraces based on panic location #60

Thomasdezeeuw opened this issue Oct 16, 2022 · 1 comment

Comments

@Thomasdezeeuw
Copy link
Owner

A patch that works, but doesn't allow for pretty formatting (as BacktraceFrame doesn't allow access to it's fields).

From 3a716a93834cc7d1655ef3bad551385019142a4e Mon Sep 17 00:00:00 2001
From: Thomas de Zeeuw <thomasdezeeuw@gmail.com>
Date: Sun, 16 Oct 2022 16:22:15 +0200
Subject: [PATCH 1/2] [WIP] Trim backtraces based on panic location

---
 src/config.rs | 49 +++++++++++++++++++++++++++++++++++++++++++++++--
 src/lib.rs    |  4 ++++
 2 files changed, 51 insertions(+), 2 deletions(-)

diff --git a/src/config.rs b/src/config.rs
index 7c81059..af51233 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -133,9 +133,54 @@ pub(crate) fn get_log_targets() -> Targets {
 /// Panic hook that logs the panic using [`log::error!`].
 #[cfg(feature = "log-panic")]
 fn log_panic(info: &std::panic::PanicInfo<'_>) {
-    use std::backtrace::Backtrace;
+    use std::backtrace::{Backtrace, BacktraceStatus};
+    use std::fmt::{self, Write};
+    use std::panic::Location;
     use std::thread;
 
+    use log::kv::{ToValue, Value};
+
+    struct ShortBackTrace<'a>(&'a Backtrace, Option<&'a Location<'a>>);
+
+    impl<'a> ToValue for ShortBackTrace<'a> {
+        fn to_value(&self) -> Value<'_> {
+            Value::from_dyn_display(self)
+        }
+    }
+
+    impl<'a> fmt::Display for ShortBackTrace<'a> {
+        fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+            match self.0.status() {
+                BacktraceStatus::Captured => { /* Continue. */ }
+                BacktraceStatus::Disabled => return f.write_str("backtrace disabled"),
+                BacktraceStatus::Unsupported => return f.write_str("backtrace unsupported"),
+                _ => { /* Will attempt to print a backtrace. */ }
+            }
+
+            let file = match self.1 {
+                Some(loc) => loc.file(),
+                // Don't have a panic location, so we don't to where to shorten
+                // the backtrace.
+                None => return fmt::Display::fmt(self.0, f),
+            };
+
+            let mut frame_data = String::new();
+            let mut skip = 0;
+            for (i, frame) in self.0.frames().into_iter().enumerate() {
+                frame_data.clear();
+                write!(&mut frame_data, "{frame:?}").unwrap();
+                if frame_data.contains(file) {
+                    skip = i;
+                    break;
+                }
+            }
+            for (n, frame) in self.0.frames()[skip..].into_iter().enumerate() {
+                write!(f, "{n}. {frame:?}\n")?;
+            }
+            Ok(())
+        }
+    }
+
     let thread = thread::current();
     let thread_name = thread.name().unwrap_or("unnamed");
     let (file, line) = match info.location() {
@@ -152,7 +197,7 @@ fn log_panic(info: &std::panic::PanicInfo<'_>) {
             .target(PANIC_TARGET)
             .file(Some(file))
             .line(Some(line))
-            .key_values(&("backtrace", &backtrace as &dyn std::fmt::Display))
+            .key_values(&("backtrace", ShortBackTrace(&backtrace, info.location())))
             .build(),
     );
 }
diff --git a/src/lib.rs b/src/lib.rs
index cad8204..c78b137 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -264,6 +264,10 @@
 //! [Timestamp feature]: #timestamp-feature
 
 #![warn(missing_debug_implementations, missing_docs, unused_results)]
+#![cfg_attr(
+    all(feature = "log-panic", feature = "nightly"),
+    feature(backtrace_frames)
+)]
 
 use std::cell::RefCell;
 use std::io::{self, IoSlice, Write};
-- 
2.37.3

Formats:

From 7695fb22df04253e412e273cfa67c5715308c37f Mon Sep 17 00:00:00 2001
From: Thomas de Zeeuw <thomasdezeeuw@gmail.com>
Date: Sun, 16 Oct 2022 16:22:57 +0200
Subject: [PATCH 2/2] [WIP] Add file with backtrace formats

Don't commit this.
---
 backtrace.formats | 163 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 163 insertions(+)
 create mode 100644 backtrace.formats

diff --git a/backtrace.formats b/backtrace.formats
new file mode 100644
index 0000000..e5b5415
--- /dev/null
+++ b/backtrace.formats
@@ -0,0 +1,163 @@
+# Original (fmt::Display)
+
+ts="2022-10-16T13:57:42.951460Z" lvl="ERROR" msg="thread 'main' panicked at 'oops', examples/panic.rs:15:5" target="panic" module="" backtrace="   0: std::backtrace_rs::backtrace::libunwind::trace
+             at /rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
+   1: std::backtrace_rs::backtrace::trace_unsynchronized
+             at /rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
+   2: std::backtrace::Backtrace::create
+             at /rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/backtrace.rs:333:13
+   3: std::backtrace::Backtrace::force_capture
+             at /rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/backtrace.rs:314:9
+   4: std_logger::config::log_panic
+             at ./src/config.rs:156:21
+   5: core::ops::function::Fn::call
+             at /rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/core/src/ops/function.rs:78:5
+   6: <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call
+             at /rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/alloc/src/boxed.rs:1952:9
+   7: std::panicking::rust_panic_with_hook
+             at /rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panicking.rs:692:13
+   8: std::panicking::begin_panic_handler::{{closure}}
+             at /rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panicking.rs:577:13
+   9: std::sys_common::backtrace::__rust_end_short_backtrace
+             at /rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/sys_common/backtrace.rs:138:18
+  10: rust_begin_unwind
+             at /rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panicking.rs:575:5
+  11: core::panicking::panic_fmt
+             at /rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/core/src/panicking.rs:65:14
+  12: panic::main
+             at ./examples/panic.rs:15:5
+  13: core::ops::function::FnOnce::call_once
+             at /rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/core/src/ops/function.rs:251:5
+  14: std::sys_common::backtrace::__rust_begin_short_backtrace
+             at /rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/sys_common/backtrace.rs:122:18
+  15: std::rt::lang_start::{{closure}}
+             at /rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/rt.rs:166:18
+  16: core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once
+             at /rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/core/src/ops/function.rs:286:13
+  17: std::panicking::try::do_call
+             at /rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panicking.rs:483:40
+  18: std::panicking::try
+             at /rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panicking.rs:447:19
+  19: std::panic::catch_unwind
+             at /rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panic.rs:137:14
+  20: std::rt::lang_start_internal::{{closure}}
+             at /rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/rt.rs:148:48
+  21: std::panicking::try::do_call
+             at /rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panicking.rs:483:40
+  22: std::panicking::try
+             at /rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panicking.rs:447:19
+  23: std::panic::catch_unwind
+             at /rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panic.rs:137:14
+  24: std::rt::lang_start_internal
+             at /rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/rt.rs:148:20
+  25: std::rt::lang_start
+             at /rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/rt.rs:165:17
+  26: _main
+"
+
+# Original (fmt::Debug)
+
+ts="2022-10-16T13:58:21.833870Z" lvl="ERROR" msg="thread 'main' panicked at 'oops', examples/panic.rs:15:5" target="panic" module="" backtrace="Backtrace [{ fn: "std::backtrace_rs::backtrace::libunwind::trace", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/../../backtrace/src/backtrace/mod.rs", line: 66 }, { fn: "std::backtrace_rs::backtrace::trace_unsynchronized", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/../../backtrace/src/backtrace/mod.rs", line: 66 }, { fn: "std::backtrace::Backtrace::create", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/backtrace.rs", line: 333 }, { fn: "std::backtrace::Backtrace::force_capture", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/backtrace.rs", line: 314 }, { fn: "std_logger::config::log_panic", file: "./src/config.rs", line: 156 }, { fn: "core::ops::function::Fn::call", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/core/src/ops/function.rs", line: 78 }, { fn: "<alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/alloc/src/boxed.rs", line: 1952 }, { fn: "std::panicking::rust_panic_with_hook", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panicking.rs", line: 692 }, { fn: "std::panicking::begin_panic_handler::{{closure}}", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panicking.rs", line: 577 }, { fn: "std::sys_common::backtrace::__rust_end_short_backtrace", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/sys_common/backtrace.rs", line: 138 }, { fn: "rust_begin_unwind", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panicking.rs", line: 575 }, { fn: "core::panicking::panic_fmt", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/core/src/panicking.rs", line: 65 }, { fn: "panic::main", file: "./examples/panic.rs", line: 15 }, { fn: "core::ops::function::FnOnce::call_once", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/core/src/ops/function.rs", line: 251 }, { fn: "std::sys_common::backtrace::__rust_begin_short_backtrace", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/sys_common/backtrace.rs", line: 122 }, { fn: "std::rt::lang_start::{{closure}}", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/rt.rs", line: 166 }, { fn: "core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/core/src/ops/function.rs", line: 286 }, { fn: "std::panicking::try::do_call", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panicking.rs", line: 483 }, { fn: "std::panicking::try", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panicking.rs", line: 447 }, { fn: "std::panic::catch_unwind", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panic.rs", line: 137 }, { fn: "std::rt::lang_start_internal::{{closure}}", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/rt.rs", line: 148 }, { fn: "std::panicking::try::do_call", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panicking.rs", line: 483 }, { fn: "std::panicking::try", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panicking.rs", line: 447 }, { fn: "std::panic::catch_unwind", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panic.rs", line: 137 }, { fn: "std::rt::lang_start_internal", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/rt.rs", line: 148 }, { fn: "std::rt::lang_start", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/rt.rs", line: 165 }, { fn: "_main" }]"
+
+# Original (fmt::Debug alternative)
+
+ts="2022-10-16T14:09:55.445651Z" lvl="ERROR" msg="thread 'main' panicked at 'oops', examples/panic.rs:15:5" target="panic" module="" backtrace="[
+    [
+        { fn: "std::backtrace_rs::backtrace::libunwind::trace", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/../../backtrace/src/backtrace/mod.rs", line: 66 },
+        { fn: "std::backtrace_rs::backtrace::trace_unsynchronized", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/../../backtrace/src/backtrace/mod.rs", line: 66 },
+        { fn: "std::backtrace::Backtrace::create", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/backtrace.rs", line: 333 },
+    ],
+    [
+        { fn: "std::backtrace::Backtrace::force_capture", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/backtrace.rs", line: 314 },
+    ],
+    [
+        { fn: "std_logger::config::log_panic", file: "./src/config.rs", line: 180 },
+    ],
+    [
+        { fn: "core::ops::function::Fn::call", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/core/src/ops/function.rs", line: 78 },
+    ],
+    [
+        { fn: "<alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/alloc/src/boxed.rs", line: 1952 },
+        { fn: "std::panicking::rust_panic_with_hook", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panicking.rs", line: 692 },
+    ],
+    [
+        { fn: "std::panicking::begin_panic_handler::{{closure}}", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panicking.rs", line: 577 },
+    ],
+    [
+        { fn: "std::sys_common::backtrace::__rust_end_short_backtrace", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/sys_common/backtrace.rs", line: 138 },
+    ],
+    [
+        { fn: "rust_begin_unwind", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panicking.rs", line: 575 },
+    ],
+    [
+        { fn: "core::panicking::panic_fmt", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/core/src/panicking.rs", line: 65 },
+    ],
+    [
+        { fn: "panic::main", file: "./examples/panic.rs", line: 15 },
+    ],
+    [
+        { fn: "core::ops::function::FnOnce::call_once", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/core/src/ops/function.rs", line: 251 },
+    ],
+    [
+        { fn: "std::sys_common::backtrace::__rust_begin_short_backtrace", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/sys_common/backtrace.rs", line: 122 },
+    ],
+    [
+        { fn: "std::rt::lang_start::{{closure}}", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/rt.rs", line: 166 },
+    ],
+    [
+        { fn: "core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/core/src/ops/function.rs", line: 286 },
+        { fn: "std::panicking::try::do_call", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panicking.rs", line: 483 },
+        { fn: "std::panicking::try", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panicking.rs", line: 447 },
+        { fn: "std::panic::catch_unwind", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panic.rs", line: 137 },
+        { fn: "std::rt::lang_start_internal::{{closure}}", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/rt.rs", line: 148 },
+        { fn: "std::panicking::try::do_call", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panicking.rs", line: 483 },
+        { fn: "std::panicking::try", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panicking.rs", line: 447 },
+        { fn: "std::panic::catch_unwind", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panic.rs", line: 137 },
+        { fn: "std::rt::lang_start_internal", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/rt.rs", line: 148 },
+    ],
+    [
+        { fn: "std::rt::lang_start", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/rt.rs", line: 165 },
+    ],
+    [
+        { fn: "_main" },
+    ],
+]"
+
+
+# Trimmed (fmt::Debug)
+
+ts="2022-10-16T14:09:02.462919Z" lvl="ERROR" msg="thread 'main' panicked at 'oops', examples/panic.rs:15:5" target="panic" module="" backtrace="[[{ fn: "panic::main", file: "./examples/panic.rs", line: 15 }], [{ fn: "core::ops::function::FnOnce::call_once", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/core/src/ops/function.rs", line: 251 }], [{ fn: "std::sys_common::backtrace::__rust_begin_short_backtrace", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/sys_common/backtrace.rs", line: 122 }], [{ fn: "std::rt::lang_start::{{closure}}", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/rt.rs", line: 166 }], [{ fn: "core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/core/src/ops/function.rs", line: 286 }, { fn: "std::panicking::try::do_call", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panicking.rs", line: 483 }, { fn: "std::panicking::try", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panicking.rs", line: 447 }, { fn: "std::panic::catch_unwind", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panic.rs", line: 137 }, { fn: "std::rt::lang_start_internal::{{closure}}", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/rt.rs", line: 148 }, { fn: "std::panicking::try::do_call", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panicking.rs", line: 483 }, { fn: "std::panicking::try", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panicking.rs", line: 447 }, { fn: "std::panic::catch_unwind", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panic.rs", line: 137 }, { fn: "std::rt::lang_start_internal", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/rt.rs", line: 148 }], [{ fn: "std::rt::lang_start", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/rt.rs", line: 165 }], [{ fn: "_main" }]]"
+
+# Trimmer (fmt::Debug alternative)
+
+ts="2022-10-16T14:10:34.497084Z" lvl="ERROR" msg="thread 'main' panicked at 'oops', examples/panic.rs:15:5" target="panic" module="" backtrace="[
+    [
+        { fn: "panic::main", file: "./examples/panic.rs", line: 15 },
+    ],
+    [
+        { fn: "core::ops::function::FnOnce::call_once", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/core/src/ops/function.rs", line: 251 },
+    ],
+    [
+        { fn: "std::sys_common::backtrace::__rust_begin_short_backtrace", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/sys_common/backtrace.rs", line: 122 },
+    ],
+    [
+        { fn: "std::rt::lang_start::{{closure}}", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/rt.rs", line: 166 },
+    ],
+    [
+        { fn: "core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/core/src/ops/function.rs", line: 286 },
+        { fn: "std::panicking::try::do_call", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panicking.rs", line: 483 },
+        { fn: "std::panicking::try", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panicking.rs", line: 447 },
+        { fn: "std::panic::catch_unwind", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panic.rs", line: 137 },
+        { fn: "std::rt::lang_start_internal::{{closure}}", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/rt.rs", line: 148 },
+        { fn: "std::panicking::try::do_call", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panicking.rs", line: 483 },
+        { fn: "std::panicking::try", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panicking.rs", line: 447 },
+        { fn: "std::panic::catch_unwind", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/panic.rs", line: 137 },
+        { fn: "std::rt::lang_start_internal", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/rt.rs", line: 148 },
+    ],
+    [
+        { fn: "std::rt::lang_start", file: "/rustc/b8c35ca26b191bb9a9ac669a4b3f4d3d52d97fb1/library/std/src/rt.rs", line: 165 },
+    ],
+    [
+        { fn: "_main" },
+    ],
+]"
-- 
2.37.3
@Thomasdezeeuw
Copy link
Owner Author

Also see my comment in the rustc tracking issue: rust-lang/rust#79676 (comment).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant