问题描述
现在我的恐慌正在被吞噬。在我的用例中,我希望它使整个程序崩溃并打印堆栈跟踪。我应该如何配置它?
解决方法
恐慌通常不会被吞下,而是在等待从 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);
}));