#stack-frame #stack-trace #run-time #symbols #acquire #capture #backtrace

无 std backtrace

一个库,用于在 Rust 程序中获取运行时的堆栈跟踪(回溯)

84 个发布版本

0.3.73 2024 年 6 月 12 日
0.3.71 2024 年 3 月 22 日
0.3.69 2023 年 8 月 22 日
0.3.68 2023 年 6 月 29 日
0.1.4 2015 年 7 月 16 日

#9 in 调试

Download history 1225488/week @ 2024-05-03 1272475/week @ 2024-05-10 1318572/week @ 2024-05-17 1305066/week @ 2024-05-24 1482149/week @ 2024-05-31 1436934/week @ 2024-06-07 1390669/week @ 2024-06-14 1484316/week @ 2024-06-21 1353260/week @ 2024-06-28 1408764/week @ 2024-07-05 1458631/week @ 2024-07-12 1497608/week @ 2024-07-19 1495237/week @ 2024-07-26 1443959/week @ 2024-08-02 1539735/week @ 2024-08-09 1254903/week @ 2024-08-16

6,013,457 每月下载量
用于 32,546 个 crate(460 直接使用)

MIT/Apache

260KB
5.5K SLoC

backtrace-rs

文档

这是一个用于获取 Rust 运行时回溯的库。这个库旨在通过提供程序化接口来增强标准库的支持,但它也支持像 libstd 的 panics 一样简单地打印当前回溯。

安装

[dependencies]
backtrace = "0.3"

用法

要简单地捕获回溯并在稍后处理,可以使用顶层类型 Backtrace

use backtrace::Backtrace;

fn main() {
    let bt = Backtrace::new();

    // do_some_work();

    println!("{bt:?}");
}

然而,如果您想更直接地访问实际的跟踪功能,可以直接使用 traceresolve 函数。

fn main() {
    backtrace::trace(|frame| {
        let ip = frame.ip();
        let symbol_address = frame.symbol_address();

        // Resolve this instruction pointer to a symbol name
        backtrace::resolve_frame(frame, |symbol| {
            if let Some(name) = symbol.name() {
                // ...
            }
            if let Some(filename) = symbol.filename() {
                // ...
            }
        });

        true // keep going to the next frame
    });
}

支持的 Rust 版本

backtrace crate 是标准库的核心组件,有时必须跟上各种平台的演变以满足标准库的需求。这通常意味着使用提供各种平台 unwinding 和 symbolication 的最新库。因此,backtrace 很可能使用最新的 Rust 功能或依赖于使用这些功能的库。根据政策,其最低支持的 Rust 版本大约是当前稳定版本的“stable - 2”。

此政策优先于此仓库中其他地方写入的版本。

许可证

本项目根据以下许可证之一授权:

由您自行选择。

贡献

除非您明确声明,否则根据Apache-2.0许可证定义的,您提交给backtrace-rs的任何有意贡献,应以上述双重许可方式,不得附加任何其他条款或条件。

依赖项

~2.3–4MB
~75K SLoC