linux - 使用性能报告从特定的二进制文件中获取符号

标签 linux perf

我正在收集数据

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/

相关文章:

perf - PERF_RECORD_SAMPLE 中的不同字段有何含义?

linux - 使用 perf 测量到达主函数的时间?

java - 在进行特定系统调用时记录 java 堆栈跟踪?

c - perf record如何获取目标进程指令的虚拟内存地址以及perf使用什么数据结构来存储它

linux - Docker 镜像和容器存储在哪个文件(或路径)中?

c - : *** [test] Error 10 signify? 是什么品牌

linux - 按 id 对 UNIX 文件进行排序

kernel - perf:无法记录内核引用重定位符号

linux - 备份 bash 脚本和 tar 排除日志和目录

linux - 如何确定 glfwCreateWindow 返回 null 的原因