33个稳定版本 (3个主要版本)

12.10.0 2024年7月24日
12.8.0 2023年12月1日
12.7.1 2023年11月29日
12.3.0 2023年7月19日
9.2.1 2022年9月30日

#772 in 调试

Download history 32/week @ 2024-04-19 67/week @ 2024-04-26 57/week @ 2024-05-03 35/week @ 2024-05-10 41/week @ 2024-05-17 24/week @ 2024-05-24 181/week @ 2024-05-31 189/week @ 2024-06-07 59/week @ 2024-06-14 16/week @ 2024-06-21 22/week @ 2024-06-28 13/week @ 2024-07-05 17/week @ 2024-07-12 120/week @ 2024-07-19 74/week @ 2024-07-26 11/week @ 2024-08-02

每月223次下载
symbolic 中使用

MIT 许可证

130KB
2K SLoC

Symbolic

Build Status codecov

Symbolic 是一个用Rust编写的库,用于在 Sentry 中实现原生堆栈跟踪符号化、最小化JavaScript的源映射处理等功能。它由多个相对独立的crate组成,打包成一个C和Python库,以便独立于Rust使用。

包中包含的内容

Symbolic提供以下功能

  • 基于自定义缓存文件(symcache)的符号化
    • Mach、ELF和PE符号表生成符号缓存文件
    • Mach、ELF和PE嵌入的DWARF数据
    • PDB CodeView调试信息
    • .NET可移植PDB
    • Breakpad符号文件
    • Unity IL2CPP
  • Demangling支持
    • C++(GCC、clang和MSVC)
    • Objective C / Objective C++
    • Rust
    • Swift
  • JavaScript源映射展开
    • 基本令牌映射
    • 基于最小化源代码查找原始函数名的启发式算法
    • 索引源映射到源映射合并
  • Proguard函数映射
  • 从Mach、ELF和PDB文件生成Breakpad符号文件
  • 便捷的C和Python库
  • 处理Unreal Engine 4原生崩溃报告
    • 提取和处理minidump
    • 公开日志和UE4上下文信息

Rust使用

Rust存储库发布到Crates.io,文档可在docs.rs上找到。

Python使用

Symbolic托管在PyPI上。它作为包含预构建轮子的库,适用于linux和macOS。在其他操作系统上或用作rust库时,需要手动构建Symbolic。它应与Python 2和Python 3兼容。

Python库以平面模块的形式提供所有上述功能

from symbolic import Archive

fat = Archive.open('/path/to/object')
obj = fat.get_object(arch = 'x86_64')
print 'object debug id: {}' % obj.debug_id

C绑定

Symbolic还提供C绑定,允许FFI(Foreign Function Interface)到任意语言。有关更多信息,请参阅Symbolic C-ABI readme

源存储库

此库公开的许多功能来自独立的Rust存储库,以实现更好的使用

构建和开发

要构建Rust存储库,我们需要最新的稳定Rust版本以及C++11编译器。该存储库分为具有多个功能的 Workspace,因此在运行构建或测试时,请务必传递 --all--all-features 标志。

# Check whether the crate compiles
cargo check --all --all-features

# Run Rust tests
cargo test --all --all-features

我们使用来自最新稳定渠道的 rustfmtclippy 进行代码格式化和代码检查。为了确保这些工具设置正确并且配置正确运行,请使用以下make目标

# Format the entire codebase
make format

# Run clippy on the entire codebase
make lint

很可能,新功能还需要添加到Python包中。这首先需要公开新的C ABI函数。有关信息,请参阅Symbolic C-ABI readme

我们强烈建议在虚拟环境中开发和测试Python包。一旦ABI已更新并测试,请确保虚拟环境处于活动状态,并安装包,该包构建本地库。有两种安装方式

# Install the release build, recommended:
pip install --editable ./py

# Install the debug build, faster installation but much slower runtime:
SYMBOLIC_DEBUG=1 pip install --editable ./py

对于测试,我们使用通用的pytest。同样,请确保虚拟环境处于活动状态,并已安装最新版本的本地库。然后,运行

# Run tests manually
pytest ./py/tests

# Creates a new virtualenv, installs the release build and runs tests:
make pytest

示例

存储库包含一些示例,展示了如何使用symbolic与调试文件和minidump一起工作。大多数这些示例也可以用于从这些文件中提取信息或验证其完整性

  • dump_cfi:将对象文件的调用帧信息写入标准输出。输出格式是Breakpad的STACK记录。

  • dump_sources:创建由对象文件引用的所有文件的源存档。现在它已集成到sentry-cli difutil bundle-sources中。

  • minidump_stackwalk:从minidump中提取堆栈跟踪并对它们进行符号化。可以指定包含调试信息文件的目录的路径。

  • object_debug:打印对象文件内容的基本信息。

  • sourcemapcache_debug:将压缩的JavaScript文件及其相应的SourceMap转换为sourcemapcache并解析给定的行/列位置。

  • symcache_debug:将对象文件转换为symcache并打印其内容。可选地,这可以用于符号化相对地址。

  • unreal_engine_crash:列出Unreal Engine 4崩溃存档中包含的文件。

要运行这些示例,请使用run脚本。例如

./run minidump_stackwalk mini.dmp /path/to/files

许可证

Symbolic采用MIT许可证。它使用了Apple提供的Apache2许可证代码,用于Swift demangling。


lib.rs:

SourceMaps的快速查找缓存。

依赖项

约16MB
约372K SLoC