在perf中配置c ++程序

时间:2016-10-29 21:36:08

标签: c++ profiling profiler perf

我是Ubuntu 16.04用户。 对于分析c++程序,我使用perf工具。所以我跑:

perf record ./myprogram myprogram_args
perf report 

现在作为输出我有:

  14,52%  CSim2Sim  libsimgrid.so.3.13.90  [.] lmm_solve
   4,40%  CSim2Sim  libsimgrid.so.3.13.90  [.] lmm_update_modified_set_rec
   4,05%  CSim2Sim  libc-2.23.so           [.] _int_malloc
   3,30%  CSim2Sim  libsimgrid.so.3.13.90  [.] simgrid::surf::Model::next_occuring_event_lazy
   2,19%  CSim2Sim  libc-2.23.so           [.] _int_free
........................................................................

我只看到程序中的“深度”和库调用。如何获得与此模板类似的perf报告? (像这样):

  4,52%  CSim2Sim  my_function1(int argc, char* argv[])
  3,52%  CSim2Sim  my_function2(int argc, char* argv[])
  3,52%  CSim2Sim  my_function3(int argc, char* argv[])
  1,52%  CSim2Sim  my_function4(int argc, char* argv[])

2 个答案:

答案 0 :(得分:4)

越过info:perfPerf Wiki,最后到Tutorial - Perf Wiki

  

使用perf注释的源级别分析
  ...
  如果使用 -ggdb 编译应用程序,perf annotate可以生成源代码级别信息。以下代码段显示了在使用此调试信息进行编译时,同样执行noploop的信息量更多。

使用选项-ggdb进行编译(可能是链接?)应该可以解决问题。

然后,您可以使用perf record收集运行时信息,稍后使用perf annotate进行分析。

我刚刚找到Alternatives to gprof [closed]的答案。如果您想获取调用图信息,建议使用gcc的选项-fno-omit-frame-pointer。因此,根据您希望实现的目标和优化级别,您可能还需要添加此选项。

答案 1 :(得分:2)

我还建议使用gprof(1)。您将-pg(可能也带有-O ....)传递给gcc和/或g++来编译您的C(或C ++)程序(可能会更改一些) CFLAGS中的CXXFLAGSMakefile。阅读GCC的instrumentation options