在 tokio 任务中传播恐慌的推荐方法是什么?

use*_*855 15 rust rust-tokio

现在我的恐慌正在被吞噬。在我的用例中,我希望它使整个程序崩溃并打印堆栈跟踪。我应该如何配置它?

HHK*_*HHK 20

恐慌通常不会被吞掉,而是在等待或tokio::task::JoinHandle返回时作为错误返回,并可以进行相应的处理。tokio::task::spawn()tokio::task::spawn_blocking()

如果 Tokio 运行时内发生恐慌,则会将错误消息打印到 stderr,如下所示:“线程 'tokio-runtime-worker' 在 'Panicking...' 处恐慌,src\main.rs:26:17”。如果在环境变量RUST_BACKTRACE设置为 1 的情况下运行二进制文件,也会打印堆栈跟踪。

与所有 Rust 程序一样,您可以设置自己的恐慌处理程序,std::panic::set_hook()以便在打印恐慌信息后任何线程发生恐慌时退出:

let default_panic = std::panic::take_hook();
std::panic::set_hook(Box::new(move |info| {
    default_panic(info);
    std::process::exit(1);
}));
Run Code Online (Sandbox Code Playgroud)