feat: 增加 Native Hook 符号化与 Excel 导出 - #167
Closed
qiqingzhixin wants to merge 2 commits into
Closed
Conversation
This was referenced Jul 20, 2026
Collaborator
Author
|
Branch was pushed to the upstream repository by mistake. Replaced by fork-based PR #170. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
变更
get_symbols批量符号化接口,支持 demangle、源码位置、内联链、缺失 SO 汇总和显式 SO 名称映射。SymbolResolver,复用 SO 路径索引、模块命中/缺失缓存和Symbolizer。get_symbols。kat-native-hook-symbolizeCLI,从 trace_streamer SQLite 导出 Excel 和missing_modules工作表。核心代码调用方式
单次调用
get_symbols参数约定:
addr_list:批量输入,地址格式为模块路径或名称+0x十六进制地址;不能解析的输入保持原样。symbol_dir:本地符号表根目录;存在合法地址输入时,目录不存在会报错。module_name_map:Trace 中的 SO 名称/路径 -> 符号目录中的 SO 名称/路径;可传空表。include_source_location:true返回完整源码路径、行号和内联链;false只返回函数符号。SymbolizationResult:symbols与输入顺序一一对应;missing_modules汇总未找到的 SO 及出现次数。项目内连续调用
整个项目连续处理多批地址时,推荐在进程内复用同一个
SymbolResolver:SymbolResolver首次遇到合法查询时建立一次目录索引,并缓存模块命中和缺失结果。实例存活期间应将符号目录视为只读;目录内容变化后创建新实例。Trace 转符号示例
输出 Excel 的
symbols工作表包含callchain_id、depth、original_symbol和resolved_symbol;missing_modules工作表记录缺失 SO 和出现次数。超过单个 Excel 工作表上限时自动分页。真实 120 秒 Trace 测试
测试条件:Release 模式;符号目录
D:\zxlDown\images\laster,约 23.37 GB、3171 个 SO;启用源码位置、行号、内联链和 musl loader 名称映射。Release 构建耗时不计入转换耗时。数据与转换结果
2,205 条未转换地址全部来自同一个缺失模块:
耗时
get_symbols-> Excelget_symbols-> Excelget_symbols首次实例调用SymbolResolver,相同批次再次调用热缓存
get_symbols处理速度约 2.42 万帧/秒。相同批次复用实例约 29.5 万帧/秒,属于目录索引、模块路径和文件系统缓存充分的最佳情况;不同地址批次会高于 0.448 秒,但仍能复用目录索引和模块缓存。批量规模回归
以下是基于一份真实 30 秒帧序列进行 1×/2×/4× 复制的核心接口规模测试,用于观察输入规模增长趋势,不等同于真实 60/120 秒采集结果:
验证
cargo test -p kat-rs-native-hook-symbolize-poc:14 passed(9 个库测试、3 个 CLI 单元测试、2 个 CLI 集成测试)。cargo fmt --all -- --check。cargo clippy -p kat-rs-native-hook-symbolize-poc --all-targets -- -D warnings。git diff --check。pr-guard、test均通过。Trace 采集由 #166 独立交付。
Closes #169
Refs #152