我想在由于main
的错误而退出Result
时打印堆栈跟踪。例如:
fn main() -> std::result::Result<(), &'static str> {
Err("this erred")
}
运行RUST_BACKTRACE=1 cargo run
仅显示错误本身,但不显示堆栈跟踪。我还需要什么?
您可以直接解开结果,而不用在main上返回错误,但是有一种方法可以通过使用catch_unwind
来完成。
[进行关闭,如果出现这种情况,则可以消除引起恐慌的原因发生。
fn main() -> Result<(), &'static str> {
Err("this erred").map_err(|e| {
let _ = ::std::panic::catch_unwind(|| panic!("{}", e));
e
})
}
这将像unwrap()
一样工作,除了它不会中断主线程(或封闭线程)。 catch_unwind上面的代码将中断,因为它已经在main中返回错误。
作为说明,您可能需要对此警告:
保持谨慎请注意,此功能可能无法捕获Rust中的所有紧急情况。恐慌Rust并非总是通过展开来实现,但是可以实现通过中止该过程。此功能仅能消除松动恐慌,而不是那些中止过程的恐慌。
您可以通过将其添加到cargo.toml
来测试此行为
[profile.dev]
panic = "abort"