有没有办法让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.<任意其他节>
)。
?
编辑:
动机是在使用-ffunction-sections
编译时获取可靠的符号信息。
perf
几乎没有任何关系(除非你用-g
标志记录调用堆栈)。使用-ffunction-sections
,函数名和节名之间已经是1:1的关系,所以你应该已经得到了你想要的输出。 - Employed Russian0xffffffffaafa7fbb
,有没有办法从运行时实际地址转到ELF节段呢? - Noah-ffunction-sections
重新构建你的内核吗?为什么不构建一个非剥离的内核,这样你就可以有每个函数的符号,或者将内核符号表放在perf可以找到的地方呢? - Peter Cordes