现在我的恐慌正在被吞噬。在我的用例中,我希望它使整个程序崩溃并打印堆栈跟踪。我应该如何配置它?
问问题
969 次
1 回答
3
恐慌通常不会被吞下,而是在等待tokio::task::JoinHandle
从tokio::task::spawn()
或返回时作为错误返回,tokio::task::spawn_blocking()
并且可以相应地处理。
如果在 Tokio 运行时发生恐慌,则会将错误消息打印到 stderr,如下所示:“thread 'tokio-runtime-worker' panicked at '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);
}));
于 2021-03-25T12:43:53.673 回答