perf注解不显示源代码,已含符号与调试信息求助
解决perf注解仅显示汇编的问题
以下是针对该情况的排查和解决步骤:
注解时明确指定目标二进制文件,避免perf关联到错误的可执行文件:
perf annotate -d ./a.out --source强制clang生成兼容的DWARF调试格式,部分旧版本perf对DWARF5支持不佳,添加
-gdwarf-4参数重新编译:clang -std=c89 -pedantic -gdwarf-4 \ -Wno-attributes \ -foptimize-sibling-calls \ -fno-strict-aliasing \ -DNDEBUG \ *.c重新录制perf数据后再尝试注解操作。
检查源码文件路径是否与编译时一致:perf需要读取编译时记录的源码文件位置,若源码被移动或删除,会无法显示源码。可通过
readelf -w a.out查看调试信息中的源码路径,确认文件当前仍存在于该路径下。尝试在交互式perf report中切换源码显示:
- 运行
perf report -d ./a.out - 选中目标函数,按下
a进入注解界面 - 按下
s键切换显示源码+汇编模式,多次按s可在不同显示模式间切换
- 运行
临时降低优化等级测试,排除优化导致的源码映射丢失:
编译时添加-O0关闭优化,去掉-foptimize-sibling-calls,重新编译录制后查看是否能显示源码:clang -std=c89 -pedantic -g \ -Wno-attributes \ -O0 \ -fno-strict-aliasing \ *.c
内容的提问来源于stack exchange,提问作者Jade
相关产品推荐
相关产品推荐

