PanicInfo 不包含回溯,但您可以在恐慌钩子中自己捕获它。
从set_hook文档:
注册一个自定义的恐慌挂钩,替换之前注册的任何一个。
当线程发生恐慌时,但在调用恐慌运行时之前,会调用恐慌挂钩。因此,钩子将在中止和展开运行时运行。默认钩子会向标准错误打印一条消息,并在需要时生成回溯,但可以使用
set_hook和take_hook函数自定义此行为。
由于恐慌钩在 unwinding 之前运行,您可以使用backtrace@hellow 已经提到的箱子在恐慌钩中自己捕获回溯:
panic::set_hook(Box::new(|panic_info| {
let backtrace = Backtrace::new();
// Do something with backtrace and panic_info.
}));
Run Code Online (Sandbox Code Playgroud)
您可以使用backtrace crate生成当前堆栈的回溯。
RUST_BACKTRACE=1这与发生恐慌时Rust 在内部使用的箱子完全相同。
最简单的例子(取自文档)只是调用backtrace::Backtrace:
use backtrace::Backtrace;
fn main() {
println!("{:?}", Backtrace::new());
}
Run Code Online (Sandbox Code Playgroud)
它将返回(在我的例子中)
use backtrace::Backtrace;
fn main() {
println!("{:?}", Backtrace::new());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2291 次 |
| 最近记录: |