有没有办法让perf report
(或任何其他perf
分析工具)按elf-section显示偶数计数?
例如,标准perf record echo "hi"; perf report
导致:
# Overhead Command Shared Object Symbol
# ........ ....... ................ ......................
#
20.62% echo [unknown] [k] 0xffffffffaafa7fbb
20.59% echo [unknown] [k] 0xffffffffaa88996a
18.12% echo libc.so.6 [.] __GI___getrandom
17.68% echo [unknown] [k] 0xffffffffaa52af74
16.52% echo [unknown] [k] 0xffffffffaa8a5d57
5.51% echo [unknown] [k] 0xffffffffaafb6c1c
0.83% perf-ex [unknown] [k] 0xffffffffaafb10f0
0.11% perf-ex [unknown] [k] 0xffffffffaa249286
0.02% perf-ex [unknown] [k] 0xffffffffaa210b39
0.00% perf-ex [unknown] [k] 0xffffffffaa296106
0.00% perf-ex [unknown] [k] 0xffffffffaa296104
而不是Symbol
是函数(或地址,如果符号解析失败),有没有办法让它成为elf部分(所以可能是.text
或.text.<arbitrary-other-section>
。
?
编辑:动机是在使用-ffunction-sections
编译时获得可靠的符号信息。
1条答案
按热度按时间fdbelqdn1#
有没有办法只让它成为精灵部分(所以可能是
.text
或...我怀疑是否存在这样的选项--这似乎是一个非常奇怪的需求(http://xyproblem.info可能适用于这里)。
perf
是一个开源程序;你可以建立一个新的副本,它将地址解析为部分名称而不是符号名称。一个更简单的解决方案可能是使用
perf script -D
,它产生的输出类似于:您可以使用
PERF_RECORD_MMAP2
来找出内存中感兴趣的部分的位置,然后将来自PERF_RECORD_SAMPLE
记录的地址转换为部分名称(并丢弃符号名称)。找到了一个更简单的解决办法。
假设您有
a.out
,这是一个未剥离的二进制文件。perf record ./a.out; perf report
生成“正常”报告:让我们运行几个命令:
现在报告看起来像这样:
不是你想要的。但是让我们在
.text
的开头添加一个符号:现在运行
perf report
会产生:这正是你想要的(你可以为其他感兴趣的部分添加更多的符号)。