我是perf的新手,
尝试理解结果,但如何阅读这样的内容?
39.57% TestSoft.exe libc-2.15.so [.] 0x3fd59
7.04% TestSoft.exe libc-2.15.so [.] malloc
6.15% TestSoft.exe LoanSoft.exe [.] LoanDef::update_vec()
第一行可能是libc中的某个函数,但是它的功能是什么? 0x3fd59是什么意思? 另外,对于第二行,我的代码中的哪个函数调用malloc?对于第三行,我可以进一步对该函数执行perf只是为了查看update_vec()的哪一部分很慢?
非常感谢!
答案 0 :(得分:2)
您需要使用调试符号进行构建(编译时传递给g ++的-g
选项)。然后,您将能够看到哪个函数使用该CPU时间。您还需要使用带有调试符号的库。
答案 1 :(得分:2)
由于转储是来自用户模式的所有功能,因此建议使用调试符号编译.x3fd59是一个例程,由于缺少符号,其实际名称不可用。
See here to do your analysis at Source level.
39.57% TestSoft.exe libc-2.15.so [.] 0x3fd59
7.04% TestSoft.exe libc-2.15.so [.] malloc
6.15% TestSoft.exe LoanSoft.exe [.] LoanDef::update_vec()
首先表明收集的总样本的百分比 相应的功能。
第二栏报告过程 从中收集样品。
第三栏显示 样本来自的ELF图像的名称。如果一个程序是 动态链接,然后这可能会显示共享库的名称。 当样本来自内核时,则为伪ELF图像名称 使用[kernel.kallsyms]。
第四栏表示 获取样本的特权级别,即程序时的特权级别 当它被打断时正在运行:
[.] : user level
[k]: kernel level
[g]: guest kernel level (virtualization)
[u]: guest os user space
[H]: hypervisor
最后一列显示符号名称。