是否可以打印回溯记录(假设已启用RUST_BACKTRACE)而不会出现恐慌?似乎唯一的方法是通过调用panic!。如果没有,那是有原因的吗?
Mik*_*nen 39
std::backtrace::Backtrace从 rust 1.65.0 开始可以使用:
use std::backtrace::Backtrace;
fn main() {
// Print backtrace if either RUST_BACKTRACE or RUST_LIB_BACKTRACE is set
println!("Custom backtrace: {}", Backtrace::capture());
// or forcibly capture the backtrace regardless of environment variable configuration
println!("Custom backtrace: {}", Backtrace::force_capture());
}
Run Code Online (Sandbox Code Playgroud)
文档: https: //doc.rust-lang.org/std/backtrace/struct.Backtrace.html
hel*_*low 12
如果出现紧急情况,Rust使用回溯箱来打印回溯(已在PR#60852中合并)。
一个简单的例子可以在板条箱文档中找到
use backtrace::Backtrace;
fn main() {
let bt = Backtrace::new();
// do_some_work();
println!("{:?}", bt);
}
Run Code Online (Sandbox Code Playgroud)
例如
stack backtrace:
0: playground::main::h6849180917e9510b (0x55baf1676201)
at src/main.rs:4
1: std::rt::lang_start::{{closure}}::hb3ceb20351fe39ee (0x55baf1675faf)
at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libstd/rt.rs:64
2: {{closure}} (0x55baf16be492)
at src/libstd/rt.rs:49
do_call<closure,i32>
at src/libstd/panicking.rs:293
3: __rust_maybe_catch_panic (0x55baf16c00b9)
at src/libpanic_unwind/lib.rs:87
4: try<i32,closure> (0x55baf16bef9c)
at src/libstd/panicking.rs:272
catch_unwind<closure,i32>
at src/libstd/panic.rs:388
lang_start_internal
at src/libstd/rt.rs:48
5: std::rt::lang_start::h2c4217f9057b6ddb (0x55baf1675f88)
at /rustc/3c235d5600393dfe6c36eeed34042efad8d4f26e/src/libstd/rt.rs:64
6: main (0x55baf16762f9)
7: __libc_start_main (0x7fab051b9b96)
8: _start (0x55baf1675e59)
9: <unknown> (0x0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
261 次 |
| 最近记录: |