backtrace-rs
这是一个用于在Rust运行时获取回溯的库。该库旨在通过提供一个程序化接口来增强标准库的支持,同时也支持像libstd的panic一样简单地打印当前回溯。
安装
[dependencies]
backtrace = "0.3"
使用方法
要简单地捕获回溯并将其处理推迟到稍后的时间,你可以使用顶层的Backtrace
类型。
use backtrace::Backtrace;
fn main() {
let bt = Backtrace::new();
// do_some_work();
println!("{bt:?}");
}
但是,如果你想更直接地访问实际的追踪功能,可以直接使用trace
和resolve
函数。
fn main() {
backtrace::trace(|frame| {
let ip = frame.ip();
let symbol_address = frame.symbol_address();
// 将这个指令指针解析为符号名称
backtrace::resolve_frame(frame, |symbol| {
if let Some(name) = symbol.name() {
// ...
}
if let Some(filename) = symbol.filename() {
// ...
}
});
true // 继续处理下一帧
});
}
支持的Rust版本
backtrace
箱是标准库的核心组件,有时必须跟上各种平台的发展以满足标准库的需求。这通常意味着使用最新的库,为各种平台提供展开和符号化功能。因此,backtrace
可能会使用最新的Rust特性或依赖于使用这些特性的库。根据政策,其最低支持的Rust版本在当前稳定版本的几个版本之内,大约是"稳定版 - 2"。
这一政策优先于本仓库其他地方写的版本。
许可证
本项目采用以下两种许可证之一:
- Apache许可证2.0版(LICENSE-APACHE或 https://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT或 https://opensource.org/licenses/MIT)
由你选择。
贡献
除非你明确说明,否则你有意提交以包含在backtrace-rs中的任何贡献,按照Apache-2.0许可证的定义,都将按上述方式双重许可,没有任何附加条款或条件。