This is a reference to help answer this question: โwhat will my Rust program print if something goes wrong?โ
The examples were compiled with Rust 1.95.0. All output in these examples goes to stderr, nothing goes to stdout.
Setup code for stable_eyre
fn make_error() -> Result<(), stable_eyre::eyre::Report> { Ok(std::fs::remove_file("/this/file/does/not/exist")?) } fn install_hook() -> stable_eyre::eyre::Result<()> { let hook = stable_eyre::HookBuilder::default().capture_backtrace_by_default(true); hook.install() }
Debug
fn main() { install_hook().unwrap(); eprintln!("{:?}", make_error().unwrap_err()) }
No such file or directory (os error 2)
Stack backtrace:
0: stable_eyre::HookBuilder::make_handler
at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/stable-eyre-0.2.2/src/lib.rs:145:18
1: stable_eyre::HookBuilder::install::{{closure}}
at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/stable-eyre-0.2.2/src/lib.rs:168:63
2: eyre::capture_handler
at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/eyre-0.6.12/src/lib.rs:601:23
3: eyre::error::::from_std
at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/eyre-0.6.12/src/error.rs:90:28
4: eyre::error:: for eyre::Report>::from
at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/eyre-0.6.12/src/error.rs:496:9
5: as core::ops::try_trait::FromResidual>>::from_residual
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/result.rs:2189:27
6: stable_eyre_debug::make_error
at /home/runner/work/rust-error-output/rust-error-output/gen/src/bin/stable_eyre_debug.rs:2:8
7: stable_eyre_debug::main
at /home/runner/work/rust-error-output/rust-error-output/gen/src/bin/stable_eyre_debug.rs:12:23
8: core::ops::function::FnOnce::call_once
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/ops/function.rs:250:5
9: std::sys::backtrace::__rust_begin_short_backtrace
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/sys/backtrace.rs:166:18
10: std::rt::lang_start::{{closure}}
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/rt.rs:206:18
11: <&dyn core::ops::function::Fn<(), Output = i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe as core::ops::function::FnOnce<()>>::call_once
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/ops/function.rs:287:21
std::panicking::catch_unwind::do_call::<&dyn core::ops::function::Fn<(), Output = i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe, i32>
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:581:40
std::panicking::catch_unwind:: + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe>
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:544:19
std::panic::catch_unwind::<&dyn core::ops::function::Fn<(), Output = i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe, i32>
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panic.rs:359:14
std::rt::lang_start_internal::{closure#0}
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/rt.rs:175:24
std::panicking::catch_unwind::do_call::
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:581:40
std::panicking::catch_unwind::
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:544:19
std::panic::catch_unwind::
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panic.rs:359:14
std::rt::lang_start_internal
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/rt.rs:171:5
12: std::rt::lang_start
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/rt.rs:205:5
13: main
14: __libc_start_call_main
15: __libc_start_main@@GLIBC_2.34
16: _start
Display
fn main() { install_hook().unwrap(); eprintln!("{}", make_error().unwrap_err()) }
No such file or directory (os error 2)
Alternate Display
fn main() { install_hook().unwrap(); eprintln!("{:#}", make_error().unwrap_err()) }
No such file or directory (os error 2)
Unwrap
fn main() { install_hook().unwrap(); make_error().unwrap(); }
thread 'main' (556677) panicked at src/bin/stable_eyre_unwrap.rs:12:18:
called `Result::unwrap()` on an `Err` value: No such file or directory (os error 2)
Stack backtrace:
0: stable_eyre::HookBuilder::make_handler
at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/stable-eyre-0.2.2/src/lib.rs:145:18
1: stable_eyre::HookBuilder::install::{{closure}}
at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/stable-eyre-0.2.2/src/lib.rs:168:63
2: eyre::capture_handler
at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/eyre-0.6.12/src/lib.rs:601:23
3: eyre::error::::from_std
at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/eyre-0.6.12/src/error.rs:90:28
4: eyre::error:: for eyre::Report>::from
at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/eyre-0.6.12/src/error.rs:496:9
5: as core::ops::try_trait::FromResidual>>::from_residual
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/result.rs:2189:27
6: stable_eyre_unwrap::make_error
at /home/runner/work/rust-error-output/rust-error-output/gen/src/bin/stable_eyre_unwrap.rs:2:8
7: stable_eyre_unwrap::main
at /home/runner/work/rust-error-output/rust-error-output/gen/src/bin/stable_eyre_unwrap.rs:12:5
8: core::ops::function::FnOnce::call_once
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/ops/function.rs:250:5
9: std::sys::backtrace::__rust_begin_short_backtrace
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/sys/backtrace.rs:166:18
10: std::rt::lang_start::{{closure}}
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/rt.rs:206:18
11: <&dyn core::ops::function::Fn<(), Output = i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe as core::ops::function::FnOnce<()>>::call_once
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/ops/function.rs:287:21
std::panicking::catch_unwind::do_call::<&dyn core::ops::function::Fn<(), Output = i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe, i32>
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:581:40
std::panicking::catch_unwind:: + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe>
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:544:19
std::panic::catch_unwind::<&dyn core::ops::function::Fn<(), Output = i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe, i32>
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panic.rs:359:14
std::rt::lang_start_internal::{closure#0}
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/rt.rs:175:24
std::panicking::catch_unwind::do_call::
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:581:40
std::panicking::catch_unwind::
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:544:19
std::panic::catch_unwind::
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panic.rs:359:14
std::rt::lang_start_internal
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/rt.rs:171:5
12: std::rt::lang_start
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/rt.rs:205:5
13: main
14: __libc_start_call_main
15: __libc_start_main@@GLIBC_2.34
16: _start
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Expect
fn main() { install_hook().unwrap(); make_error().expect("oh no"); }
thread 'main' (556677) panicked at src/bin/stable_eyre_expect.rs:12:18:
oh no: No such file or directory (os error 2)
Stack backtrace:
0: stable_eyre::HookBuilder::make_handler
at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/stable-eyre-0.2.2/src/lib.rs:145:18
1: stable_eyre::HookBuilder::install::{{closure}}
at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/stable-eyre-0.2.2/src/lib.rs:168:63
2: eyre::capture_handler
at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/eyre-0.6.12/src/lib.rs:601:23
3: eyre::error::::from_std
at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/eyre-0.6.12/src/error.rs:90:28
4: eyre::error:: for eyre::Report>::from
at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/eyre-0.6.12/src/error.rs:496:9
5: as core::ops::try_trait::FromResidual>>::from_residual
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/result.rs:2189:27
6: stable_eyre_expect::make_error
at /home/runner/work/rust-error-output/rust-error-output/gen/src/bin/stable_eyre_expect.rs:2:8
7: stable_eyre_expect::main
at /home/runner/work/rust-error-output/rust-error-output/gen/src/bin/stable_eyre_expect.rs:12:5
8: core::ops::function::FnOnce::call_once
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/ops/function.rs:250:5
9: std::sys::backtrace::__rust_begin_short_backtrace
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/sys/backtrace.rs:166:18
10: std::rt::lang_start::{{closure}}
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/rt.rs:206:18
11: <&dyn core::ops::function::Fn<(), Output = i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe as core::ops::function::FnOnce<()>>::call_once
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/ops/function.rs:287:21
std::panicking::catch_unwind::do_call::<&dyn core::ops::function::Fn<(), Output = i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe, i32>
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:581:40
std::panicking::catch_unwind:: + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe>
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:544:19
std::panic::catch_unwind::<&dyn core::ops::function::Fn<(), Output = i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe, i32>
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panic.rs:359:14
std::rt::lang_start_internal::{closure#0}
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/rt.rs:175:24
std::panicking::catch_unwind::do_call::
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:581:40
std::panicking::catch_unwind::
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:544:19
std::panic::catch_unwind::
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panic.rs:359:14
std::rt::lang_start_internal
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/rt.rs:171:5
12: std::rt::lang_start
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/rt.rs:205:5
13: main
14: __libc_start_call_main
15: __libc_start_main@@GLIBC_2.34
16: _start
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Return
fn main() -> Result<(), stable_eyre::eyre::Report> { install_hook()?; make_error() }
Error: No such file or directory (os error 2)
Stack backtrace:
0: stable_eyre::HookBuilder::make_handler
at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/stable-eyre-0.2.2/src/lib.rs:145:18
1: stable_eyre::HookBuilder::install::{{closure}}
at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/stable-eyre-0.2.2/src/lib.rs:168:63
2: eyre::capture_handler
at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/eyre-0.6.12/src/lib.rs:601:23
3: eyre::error::::from_std
at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/eyre-0.6.12/src/error.rs:90:28
4: eyre::error:: for eyre::Report>::from
at /home/runner/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/eyre-0.6.12/src/error.rs:496:9
5: as core::ops::try_trait::FromResidual>>::from_residual
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/result.rs:2189:27
6: stable_eyre_return::make_error
at /home/runner/work/rust-error-output/rust-error-output/gen/src/bin/stable_eyre_return.rs:2:8
7: stable_eyre_return::main
at /home/runner/work/rust-error-output/rust-error-output/gen/src/bin/stable_eyre_return.rs:12:5
8: core::ops::function::FnOnce::call_once
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/ops/function.rs:250:5
9: std::sys::backtrace::__rust_begin_short_backtrace
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/sys/backtrace.rs:166:18
10: std::rt::lang_start::{{closure}}
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/rt.rs:206:18
11: <&dyn core::ops::function::Fn<(), Output = i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe as core::ops::function::FnOnce<()>>::call_once
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/core/src/ops/function.rs:287:21
std::panicking::catch_unwind::do_call::<&dyn core::ops::function::Fn<(), Output = i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe, i32>
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:581:40
std::panicking::catch_unwind:: + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe>
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:544:19
std::panic::catch_unwind::<&dyn core::ops::function::Fn<(), Output = i32> + core::marker::Sync + core::panic::unwind_safe::RefUnwindSafe, i32>
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panic.rs:359:14
std::rt::lang_start_internal::{closure#0}
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/rt.rs:175:24
std::panicking::catch_unwind::do_call::
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:581:40
std::panicking::catch_unwind::
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panicking.rs:544:19
std::panic::catch_unwind::
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/panic.rs:359:14
std::rt::lang_start_internal
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/rt.rs:171:5
12: std::rt::lang_start
at /rustc/59807616e1fa2540724bfbac14d7976d7e4a3860/library/std/src/rt.rs:205:5
13: main
14: __libc_start_call_main
15: __libc_start_main@@GLIBC_2.34
16: _start