#symbol-name #dwarf #elf #stack-trace #tracing #gsym #api-bindings

blazesym

blazesym 是一个用于地址符号化和相关任务的库

14 个版本

0.2.0-rc.02024 年 6 月 10 日
0.2.0-alpha.112024 年 2 月 23 日
0.2.0-alpha.92023 年 12 月 11 日
0.2.0-alpha.82023 年 11 月 2 日
0.1.0 2022 年 7 月 12 日

#34 in 调试

Download history 236/week @ 2024-05-03 134/week @ 2024-05-10 55/week @ 2024-05-17 44/week @ 2024-05-24 28/week @ 2024-05-31 227/week @ 2024-06-07 153/week @ 2024-06-14 114/week @ 2024-06-21 60/week @ 2024-06-28 119/week @ 2024-07-05 117/week @ 2024-07-12 144/week @ 2024-07-19 28/week @ 2024-07-26 120/week @ 2024-08-02 139/week @ 2024-08-09 78/week @ 2024-08-16

370 每月下载量
用于 7 个 Crates (5 直接)

BSD-3-Clause

635KB
14K SLoC

pipeline coverage crates.io Docs rustc

blazesym

blazesym 是一个可用于符号化地址的库。地址符号化是在跟踪上下文中常见的问题,例如,用户希望通过名称推理函数,但低级组件只报告“原始”地址(例如,堆栈跟踪的形式)。

除了符号化之外,blazesym 还提供了反向操作的 API:从符号名称查找地址。这对于配置断点或跟踪点可能很有用。

该库旨在提供“一站式”体验。也就是说,它试图默认执行预期的事情。当这种便利性以性能为代价时,我们旨在提供高级 API,允许在运行时配置相应的功能。

blazesym 支持多种格式,如 DWARF、ELF、Breakpad 和 Gsym(以下为最新列表)。

这个库是用Rust编写的,并提供了一流的C API。此crate遵循Cargo的语义版本控制规则。至少,它使用最近的Rust稳定版减去五个小版本("N - 5")进行构建。例如,假设最近的Rust稳定版是1.68,则crate保证能够与1.63和更高版本兼容。

状态

blazesym是Meta内部持续分析解决方案的核心,每天处理数十亿个符号化请求。

该库正在积极开发中,主要目标是稳定API界面。欢迎就讨论、功能建议或代码贡献做出贡献!

如上所述,该库支持多种格式。对于符号化而言,以下表格说明了每种格式支持的功能以及blazesym目前是否可以使用此功能

格式 功能 格式支持吗? blazesym支持吗?
Breakpad 符号大小 ✔️ ✔️
源代码位置信息 ✔️ ✔️
内联函数信息 ✔️ ✔️
ELF 符号大小 ✔️ ✔️
源代码位置信息 ✖️ ✖️
内联函数信息 ✖️ ✖️
DWARF 符号大小 ✔️ ✔️
源代码位置信息 ✔️ ✔️
内联函数信息 ✔️ ✔️
Gsym 符号大小 ✔️ ✔️
源代码位置信息 ✔️ ✔️
内联函数信息 ✔️ ✔️
Ksym 符号大小 ✖️ ✖️
源代码位置信息 ✖️ ✖️
内联函数信息 ✖️ ✖️

以下是当前计划功能的粗略路线图(不分先后顺序)

操作系统支持

该库的主要目标操作系统是Linux(它应在所有较新的内核版本和发行版上工作)。目前对MacOS没有积极支持(尽管可能工作),但我们将很高兴接受任何修复潜在缺陷的pull请求。

构建与使用

blazesym 需要标准的 Rust 工具链,可以使用 Cargo 项目管理器进行构建(例如,cargo build)。

Rust

从 Rust 项目中消费应通过 Cargo.toml

[dependencies]
blazesym = "=0.2.0-rc.0"

请参考 examples/ 文件夹 中的快速示例。有关单个类型和函数的综合说明,请参阅 文档

C

配套的 crate blazesym-c 提供了从 C 与库交互的方法。请参阅其 README 了解使用详情。

命令行

该库还附带了一个 命令行界面,用于快速实验和调试。您可以直接从仓库运行它,例如。

cargo run -p blazecli -- symbolize elf --path /lib64/libc.so.6 00000000000caee1

请参阅其 README 以及帮助文本以获取更多信息和使用说明。

各种目标三联体的静态链接二进制文件可根据需要在此 获取。

依赖项

~0–3MB
~44K SLoC