当fn main()->结果返回错误时获取回溯

问题描述 投票:0回答:1

我想在由于main的错误而退出Result时打印堆栈跟踪。例如:

fn main() -> std::result::Result<(), &'static str> {
    Err("this erred")
}

运行RUST_BACKTRACE=1 cargo run仅显示错误本身,但不显示堆栈跟踪。我还需要什么?

rust stack-trace
1个回答
0
投票

您可以直接解开结果,而不用在main上返回错误,但是有一种方法可以通过使用catch_unwind来完成。

From the ref

[进行关闭,如果出现这种情况,则可以消除引起恐慌的原因发生。

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"
© www.soinside.com 2019 - 2024. All rights reserved.