我正在收集数据
perf record -o "filename.here" -a --call-graph dwarf -p `pidof binary.here`
并用它来阅读
perf report -i "filename.here"
但是,当我的实时二进制文件被更改/重建时(由于我不断更新它,因为它是一项正在进行的工作),这会停止工作,并显示“无法找到带有构建 id XXX 的二进制文件”。我正在保存收集数据的旧二进制文件,但似乎没有办法让 perf report
显式加载特定的二进制文件(有 --symfs
选项,但那是在那里查找所有库/等的所有调试符号,这也不是解决方案)。
另一种解决方案是停止实时二进制文件并复制粘贴备份的二进制文件来代替它,但我不能仅仅为了执行此操作而停止实时二进制文件。另一个解决方案是将备份的二进制文件复制到不同的服务器上,以便我可以将其存储在 perf 尝试搜索它的同一路径中。
有没有更好的解决方案?
最佳答案
该消息:
binary with build id XXX cannot be found
是因为perf record
会在记录阶段结束时保存带有样本的二进制文件的副本,这样如果您稍后更新它,没有问题,特定的二进制文件已保存在 ~/.debug/.build/id/AA/BBCCDDEEFF001122
下,这就是 perf report
和其他消费者将查找的内容。
那么问题就在于找出为什么没有找到该构建 ID。您是否在同一台计算机上同时使用“性能记录”和“性能报告”?
还有什么:
perf buildid-list -i filename.here
说?
查看 ~/.debug/目录中的该文件。
perf buildid-list -i /path/to/binary
会告诉您二进制文件的 buildid。
关于linux - 使用性能报告从特定的二进制文件中获取符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53998800/