在perf中优化C++程序的配置文件

3

我是Ubuntu 16.04的用户。 为了对程序进行分析,我使用工具。所以我运行:

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[])

可能需要使用选项“-g”进行编译和链接。 - Olaf Dietsche
@OlafDietsche 我已经尝试过了,但一切都没有改变 =( - Kenenbek Arzymatov
2
你尝试过这个了吗? - Mike Dunlavey
2个回答

4

info:perf再到Perf Wiki,最后到Tutorial - Perf Wiki

使用perf annotate进行源代码级别的分析
...
如果应用程序使用-ggdb编译,则perf annotate可以生成源代码级别的信息。以下代码片段显示了在使用此调试信息编译时,相同执行noploop的输出更加详细的信息。

因此,使用选项-ggdb进行编译(和链接?)应该就可以解决问题。

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

我刚刚找到了对Alternatives to gprof [closed]的答案。它建议使用gcc选项-fno-omit-frame-pointer,如果你想要获得调用图信息。因此,根据你想要实现什么和你的优化级别,你可能也需要添加这个选项。


2
我还建议使用gprof(1)。您需要通过将-pg(可能还有-O)传递给gcc和/或g++来编译C(或C ++)程序(也许需要更改Makefile中的一些CFLAGSCXXFLAGS)。请阅读有关GCC的仪器选项的相关信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接