rust - 是否可以在不恐慌的情况下在 Rust 中打印回溯?
问题描述
是否可以在不惊慌的情况下打印回溯(假设启用了 RUST_BACKTRACE)?似乎这样做的唯一方法是通过调用panic!
。如果没有,有什么原因吗?
解决方案
Rust 使用backtrace crate打印回溯以防出现恐慌(已合并在PR #60852 中)。
可以在 crate 文档中找到一个简单的示例
use backtrace::Backtrace;
fn main() {
let bt = Backtrace::new();
// do_some_work();
println!("{:?}", bt);
}
例如
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)
推荐阅读
- machine-learning - Julia 中的 GPU 处理,改动很小
- c# - 使用 EF 生成的 MySQL 在 LinQ 中为 FromSqlRaw 在从系统中选择变量时返回“SQL 语法错误”
- python - 创建密码解码器的反转部分
- django - Django 无法在下一个模板中传递变量名
- swift - Swift 活动指示器仅在某些时候出现
- javascript - Python 1e7 和 % 运算符
- c# - 在 IAsyncActionFilter 中使用 MemCache
- javascript - 有没有办法手动卸载 chrome 扩展的后台脚本?
- python - Python:While循环超出了条件
- javascript - 通过 API 获取信息时出错。帮帮我