总是将RUST_BACKTRACE设置为1是否合理?

有什么意义吗正常执行期间(例如函数调用期间)的开销,还是发生panic 时只有开销?

推荐答案

标准库中唯一读取RUST_BACKTRACE环境变量的地方是函数sys_common::backtrace::log_enabled().该函数仅从panicking::default_hook调用,panicking::default_hook在panic 发生后被调用.因此,设置它应该不会影响性能,除非线程崩溃.

请注意,此标志还影响编译器本身(rustc).编译器有时会发出panic ,导致"正常"退出,禁止打印回溯,但仍在计算回溯.当编译错误后退出时,可能会发生这种情况.过go ,有人报告说,这导致一些版本的编译器需要很长时间才能退出RUST_BACKTRACE=1集.

一些 crate 本身也可以处理RUST_BACKTRACE:例如,error_chain crate 在生成错误并设置RUST_BACKTRACE=1时会生成回溯.这可能会减慢使用此 crate 的项目.使用error_chain的一个著名项目是cargo.

Rust相关问答推荐

为什么拥有的trait对象的相等运算符移动了正确的操作数?

我怎样才能从一个Rust 的日期中go 掉3年?

如何在递归数据 struct 中移动所有权时变异引用?

如何实现Deref;多次;?

为什么RefCell没有与常规引用相同的作用域?

Tokio';s io::用Cursor拆分<;Vec<;u8>>;赢得';t get the full writted data

如何获取光标下的像素 colored颜色 ?

在 Rust 中,在需要引用 self 的 struct 体方法中使用闭包作为 while 循环条件

提取指向特征函数的原始指针

Rust 为什么被视为borrow ?

如何在 Rust 中将 bson::Bson 转换为 Vec

无法理解 Rust 对临时值的不可变和可变引用是如何被删除的

为什么1..=100返回一个范围而不是一个整数?

在 Rust 中如何将值推送到枚举 struct 内的 vec?

试图理解 Rust 中的可变闭包

为什么指定生命周期让我返回一个引用?

是否有适当的方法在参考 1D 中转换 2D 数组

如何在 nom 中构建负前瞻解析器?

将 (T, ()) 转换为 T 安全吗?

Rust 为什么 (u32, u32) 的枚举变体的大小小于 (u64)?