You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ThreadSanitizer(TSan)堆栈跟踪中查找对应代码行号

TSan栈回溯无行号问题解决方案

核心原因

TSan输出行号依赖额外的符号解析工具和完整的调试信息,当前无行号问题通常由符号解析工具缺失、调试信息被优化/裁剪两种原因导致,可按以下步骤排查解决:

  • 安装正确版本的符号解析工具
    TSan默认调用llvm-symbolizer完成地址到代码行号的转换,你需要安装和所用Clang版本匹配的llvm-symbolizer包,比如Clang 15对应安装llvm-15-symbolizer。可以通过以下两种方式指定工具路径:
    • 做软链接:ln -s /usr/lib/llvm-15/bin/llvm-symbolizer /usr/bin/llvm-symbolizer
    • 运行程序前指定环境变量:export TSAN_SYMBOLIZER_PATH=/usr/lib/llvm-15/bin/llvm-symbolizer
  • 调整编译链接选项
    除了你已经添加的-g3、-O1参数外,额外添加-fno-omit-frame-pointer参数,避免帧指针被优化导致栈回溯失败。同时链接阶段禁止添加任何裁剪符号的参数(包括-s),也不要在编译完成后手动strip二进制文件。
  • 降低优化等级验证
    如果调整后仍无行号,可以将-O1替换为-O0测试,部分架构下的O1优化可能会打乱调试信息和执行指令的对应关系,O0等级下可以先验证行号输出是否正常。
  • 手动解析地址
    上述步骤都无效的情况下可以手动解析栈地址,从TSan的输出中提取对应指令的十六进制地址,用llvm-symbolizer直接解析:
    示例命令:llvm-symbolizer -e 你的二进制文件路径 指令地址,执行后会直接返回对应代码文件路径和行号。

内容的提问来源于stack exchange,提问作者jeffbRTC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:27:03