为什么循环摘要在gprof调用图输出中没有任何调用?

时间:2009-05-08 06:01:15

标签: c++ profiling gprof call-graph

我使用GNU gprof 2.15.94.0.2.2来分析我的C ++程序,它有很大的调用周期。我希望在调用图输出中看到类似下面的内容gprof's documentation indicates

index  % time    self  children called     name
----------------------------------------
                 1.77        0    1/1        main [2]
[3]     91.71    1.77        0    1+5    <cycle 1 as a whole> [3]
                 1.02        0    3          b <cycle 1> [4]
                 0.75        0    2          a <cycle 1> [5]
                    0        0    6/6        c [6]
----------------------------------------

但是,我的<cycle as a whole>个条目都没有列出任何来电者。他们都是这样的:

index  % time    self  children called             name
----------------------------------------------
[8]     65.6    259.55  5342.63  9334767+60122608 <cycle 2 as a whole> [8]
                133.28  2051.45  12043564+74015448    foo <cycle 2> [14]
                18.90   976.38   2379645              bar <cycle 2> [21]
...                                                                      
-----------------------------------------------

由于我的周期非常大,因此很难通过循环中的各个函数跟踪调用者。

任何人都可以告诉我为什么输出中缺少循环调用者,以及如何使它们出现?

2 个答案:

答案 0 :(得分:1)

您的应用程序是否使用多线程? gprof根本不适用于线程。否则,您可能很可能遇到了gprof中的错误。这是错误的和过时的错误。更好地使用像oprofile或valgrind这样的东西。

答案 1 :(得分:0)

这是您的主要关注点,还是您有更大的目标,比如试图找到可以优化的内容?通常,这就是人们使用 gprof 的原因。

gprof is what it is, but you can do better.