我正在收集数据
perf record -o "filename.here" -a --call-graph dwarf -p `pidof binary.here`
并用
阅读perf report -i "filename.here"
但是,当我的实时二进制文件被更改/重建时(由于我一直在进行更新,因为它正在进行中,因此我不断对其进行更新),此操作停止工作,并说“找不到具有ID为XXX的二进制文件”。我保存的是收集数据的旧二进制文件,但是看来perf report
无法显式加载特定的二进制文件(有--symfs
选项,但那是要查找所有库中的所有调试符号/ etc,这也不是解决方案。
另一种解决方案是停止实时二进制文件,而不是复制粘贴备份的二进制文件,但是我不能仅仅为了做到这一点而停止实时二进制文件。另一个解决方案是将备份的二进制文件复制到其他服务器上,这样我就可以将其存储在perf尝试搜索的同一路径中。
有没有更好的解决方案?
答案 0 :(得分:2)
该消息:
binary with build id XXX cannot be found
之所以在这里是因为perf record
将在记录阶段结束时保存带有示例的二进制文件的副本,因此,如果以后进行更新,没问题,该特定二进制文件将保存在{{1 }},这就是~/.debug/.build/id/AA/BBCCDDEEFF001122
和其他使用者的查询方式。
这是弄清楚为什么找不到该构建ID的问题。您是否在同一台计算机上同时使用“性能记录”和“性能报告”?
还有:
perf report
可以吗?
在〜/ .debug /目录中查找该文件。
perf buildid-list -i filename.here
会告诉您二进制文件的buildid。