Open
Description
rustc inserts frames std::sys_common::backtrace::__rust_end_short_backtrace
and std::sys_common::backtrace::__rust_begin_short_backtrace
so that the internal backtrace implementation can filter out noise from backtrace capturing.
However those are not used when std::backtrace::Backtrace is displayed leading to incredibly verbose backtraces.
Maybe we could perform this filtering for "{}" but provide the unfiltered values for "{:#}"?
I tried this code:
fn setup() {
std::panic::set_hook(Box::new(|panic| {
println!("{}", std::backtrace::Backtrace::force_capture());
}));
}
fn run() {
panic!("OOPS");
}
fn main() {
setup();
run();
}
I expected to see this happen:
0: rust_begin_unwind
at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panicking.rs:584:5
1: core::panicking::panic_fmt
at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/core/src/panicking.rs:142:14
2: foo::run
at ./src/main.rs:8:5
3: foo::main
at ./src/main.rs:13:5
4: core::ops::function::FnOnce::call_once
at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/core/src/ops/function.rs:248:5
Instead, this happened:
0: foo::setup::{{closure}}
at ./src/main.rs:3:24
1: std::panicking::rust_panic_with_hook
at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panicking.rs:702:17
2: std::panicking::begin_panic_handler::{{closure}}
at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panicking.rs:586:13
3: std::sys_common::backtrace::__rust_end_short_backtrace
at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/sys_common/backtrace.rs:138:18
4: rust_begin_unwind
at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panicking.rs:584:5
5: core::panicking::panic_fmt
at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/core/src/panicking.rs:142:14
6: foo::run
at ./src/main.rs:8:5
7: foo::main
at ./src/main.rs:13:5
8: core::ops::function::FnOnce::call_once
at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/core/src/ops/function.rs:248:5
9: std::sys_common::backtrace::__rust_begin_short_backtrace
at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/sys_common/backtrace.rs:122:18
10: std::rt::lang_start::{{closure}}
at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/rt.rs:166:18
11: core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once
at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/core/src/ops/function.rs:283:13
12: std::panicking::try::do_call
at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panicking.rs:492:40
13: std::panicking::try
at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panicking.rs:456:19
14: std::panic::catch_unwind
at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panic.rs:137:14
15: std::rt::lang_start_internal::{{closure}}
at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/rt.rs:148:48
16: std::panicking::try::do_call
at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panicking.rs:492:40
17: std::panicking::try
at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panicking.rs:456:19
18: std::panic::catch_unwind
at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/panic.rs:137:14
19: std::rt::lang_start_internal
at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/rt.rs:148:20
20: std::rt::lang_start
at /rustc/897e37553bba8b42751c67658967889d11ecd120/library/std/src/rt.rs:165:17
21: main
22: <unknown>
23: __libc_start_main
24: _start
at /build/glibc/src/glibc/csu/../sysdeps/x86_64/start.S:115
Meta
rustc --version --verbose
:
rustc 1.67.0-nightly (b28d30e1e 2022-12-06)
binary: rustc
commit-hash: b28d30e1e3c2b90fd08b7dd79d8e63884d1e0339
commit-date: 2022-12-06
host: x86_64-unknown-linux-gnu
release: 1.67.0-nightly
LLVM version: 15.0.4