在perf profiler中调用堆栈

时间:2012-08-28 13:36:03

标签: linux profiling perf

我正在以下列方式运行“perf”:

perf record -a --call-graph -p some_pid

perf report --call-graph --stdio

然后,我看到了:

 1.60%     my_binary  my_binary                [.] my_func
           |
           --- my_func
              |          
              |--71.10%-- (nil)
              |          (nil)
              |          
               --28.90%-- 0x17f310000000a

我无法看到哪些函数调用my_func()。我看到“nil”和“0x17f310000000a”。难道我做错了什么?这可能不是调试信息问题,因为显示了一些符号而其他符号未显示。

更多信息:

  • 我正在运行CentOS 6.2(内核2.6.32-220.4.1)。
  • perf rpm - perf-2.6.32-279.5.2.el6.x86_64。

3 个答案:

答案 0 :(得分:25)

确保使用-fno-omit-frame-pointer gcc 选项编译代码。

答案 1 :(得分:14)

你几乎就在那里,你错过了-G选项(你可能需要比你系统上安装的更新的性能):

$ perf report --call-graph --stdio -G

来自perf help report

   -G, --inverted
       alias for inverted caller based call graph.

答案 2 :(得分:-1)

您是否尝试使用Zoom进行分析?它可以使用perf,自定义驱动程序或oprofile来收集样本。如果您只想查看一个进程,请尝试“线程时间”配置。

我很想知道Zoom的选项在获取功能信息方面是否比独立性能更好/不同。