现在我的panic被忽略了。在我的使用场景中,我希望它能崩溃整个程序,并打印堆栈跟踪信息。应该如何配置?
现在我的panic被忽略了。在我的使用场景中,我希望它能崩溃整个程序,并打印堆栈跟踪信息。应该如何配置?
通常情况下,panic不会被吞掉,而是在等待从tokio::task::spawn()
或tokio::task::spawn_blocking()
返回的tokio::task::JoinHandle
时作为错误返回,并且可以相应地处理。
如果在Tokio运行时内发生panic,则会像这样向stderr打印错误消息:"thread 'tokio-runtime-worker' panicked at 'Panicking...', src\main.rs:26:17"。如果您使用环境变量RUST_BACKTRACE
设置为1来运行二进制文件,则还会打印堆栈跟踪。
与所有Rust程序一样,您可以使用std::panic::set_hook()
设置自己的panic处理程序,在打印panic信息后使其退出,例如:
let default_panic = std::panic::take_hook();
std::panic::set_hook(Box::new(move |info| {
default_panic(info);
std::process::exit(1);
}));