在 Rust tokio 代码中传播恐慌的推荐方法是什么?

问题描述

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

解决方法

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

如果 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);
}));

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...