hide panic internals in short backtraces · Issue #124586 · rust-lang/rust (original) (raw)
right now, nearly all foo.expect("bar")
backtraces start like this:
stack backtrace:
0: rust_begin_unwind
at /rustc/7f2fc33da6633f5a764ddc263c769b6b2873d167/library/std/src/panicking.rs:652:5
1: core::panicking::panic_fmt
at /rustc/7f2fc33da6633f5a764ddc263c769b6b2873d167/library/core/src/panicking.rs:72:14
2: core::panicking::panic_display
at /rustc/7f2fc33da6633f5a764ddc263c769b6b2873d167/library/core/src/panicking.rs:256:5
3: core::panicking::panic_str
at /rustc/7f2fc33da6633f5a764ddc263c769b6b2873d167/library/core/src/panicking.rs:231:5
4: core::option::expect_failed
at /rustc/7f2fc33da6633f5a764ddc263c769b6b2873d167/library/core/src/option.rs:1994:5
5: core::option::Option<T>::expect
at /rustc/7f2fc33da6633f5a764ddc263c769b6b2873d167/library/core/src/option.rs:895:21
this is not super useful. it doesn't add any information, other than maybe the very last frame which says you called expect()
. it would be nice to omit anything in the core::panicking
module from the backtrace; and maybe expect_failed
and the core::ops::function::FnOnce::call_once
that show up at the end of the backtrace as well. people can always opt back in with RUST_BACKTRACE=full.
the code for this lives in
// Any frames between `__rust_begin_short_backtrace` and `__rust_end_short_backtrace` |
---|
// are omitted from the backtrace in short mode, `__rust_end_short_backtrace` will be |
// called before the panic hook, so we won't ignore any frames if there is no |
// invoke of `__rust_begin_short_backtrace`. |
if print_fmt == PrintFmt::Short { |
@rustbot label +T-libs +A-runtime