【问题标题】:`gprof` time spent in particular lines of code`gprof` 花费在特定代码行上的时间
【发布时间】:2012-03-25 10:07:28
【问题描述】:

我一直将gprof 分析器与g++ 结合使用。

我的代码中有一个函数,它封装了与主要函数足够相关的几个行为部分,因此将它们拆分为它们自己的函数是没有意义的。

我想知道在这些代码领域的每一个方面花费了多少时间。

所以,如果你想象代码看起来像这样

function(){
    A
    A
    A
    B
    B
    B
    C
    C
    C
}

其中 A、B 和 C 代表我感兴趣的特定代码部分,有没有办法让 gprof 告诉我在这些特定部分上花费了多少时间?

【问题讨论】:

  • 如果你想让程序运行得更快,you can do better than gprof.
  • @MikeDunlavey 问题被删除太可惜了。
  • 这个答案获得了 192 票。呸

标签: c++ profiling gprof


【解决方案1】:

这里有一个有用的资源:@​​987654321@。

对于旧版本的 gcc 编译器,gprof -l 参数逐行指定。

但是,较新版本的 gcc 使用 gcov 工具而不是 gprof 来逐行显示分析信息。

【讨论】:

    【解决方案2】:

    如果您使用的是 linux,那么您可以使用 linux perf 而不是 gprof,如下所述:

    http://code.google.com/p/jrfonseca/wiki/Gprof2Dot#linux_perf

    输入 perf report 并选择一个函数,您可以逐行获取有关 CPU 时间在函数内的使用位置的信息。

    【讨论】:

      【解决方案3】:

      我知道这是一个老问题,但我找到了一个有趣的答案。 正如 Sam 所说,-l 选项仅适用于旧的 gcc 编译器。但是我发现如果你编译链接-pg -fprofile-arcs -ftest-coverage,运行程序,gprof -l的结果很有趣。

      Flat profile:
      
      Each sample counts as 0.01 seconds.
        %   cumulative   self              self     total           
       time   seconds   seconds    calls  Ts/call  Ts/call  name    
       13.86      0.26     0.26                             main (ComAnalyste.c:450 @ 804b315)
       10.87      0.46     0.20                             main (ComAnalyste.c:386 @ 804b151)
        7.07      0.59     0.13                             main (ComAnalyste.c:437 @ 804b211)
        6.25      0.70     0.12                             main (ComAnalyste.c:436 @ 804b425)
        4.89      0.79     0.09                             main (ComAnalyste.c:283 @ 804a3f4)
        4.89      0.88     0.09                             main (ComAnalyste.c:436 @ 804b1e9)
        4.08      0.96     0.08                             main (ComAnalyste.c:388 @ 804ad95)
        3.81      1.03     0.07                             main (ComAnalyste.c:293 @ 804a510)
        3.53      1.09     0.07                             main (ComAnalyste.c:401 @ 804af04)
        3.26      1.15     0.06                             main (ComAnalyste.c:293 @ 804a4bf)
        2.72      1.20     0.05                             main (ComAnalyste.c:278 @ 804a48d)
        2.72      1.25     0.05                             main (ComAnalyste.c:389 @ 804adae)
        2.72      1.30     0.05                             main (ComAnalyste.c:406 @ 804aecb)
        2.45      1.35     0.05                             main (ComAnalyste.c:386 @ 804ad6d)
        2.45      1.39     0.05                             main (ComAnalyste.c:443 @ 804b248)
        2.45      1.44     0.05                             main (ComAnalyste.c:446 @ 804b2f4)
        2.17      1.48     0.04                             main (ComAnalyste.c:294 @ 804a4e4)
        2.17      1.52     0.04                             main (ComAnalyste.c:459 @ 804b43b)
        1.63      1.55     0.03                             main (ComAnalyste.c:442 @ 804b22d)
        1.63      1.58     0.03                             main (ComAnalyste.c:304 @ 804a56d)
        1.09      1.60     0.02                             main (ComAnalyste.c:278 @ 804a3b3)
        1.09      1.62     0.02                             main (ComAnalyste.c:285 @ 804a450)
        1.09      1.64     0.02                             main (ComAnalyste.c:286 @ 804a470)
        1.09      1.66     0.02                             main (ComAnalyste.c:302 @ 804acdf)
        0.82      1.67     0.02                             main (ComAnalyste.c:435 @ 804b1d2)
        0.54      1.68     0.01                             main (ComAnalyste.c:282 @ 804a3db)
        0.54      1.69     0.01                             main (ComAnalyste.c:302 @ 804a545)
        0.54      1.70     0.01                             main (ComAnalyste.c:307 @ 804a586)
        0.54      1.71     0.01                             main (ComAnalyste.c:367 @ 804ac1a)
        0.54      1.72     0.01                             main (ComAnalyste.c:395 @ 804ade6)
        0.54      1.73     0.01                             main (ComAnalyste.c:411 @ 804aff8)
        0.54      1.74     0.01                             main (ComAnalyste.c:425 @ 804b12a)
        0.54      1.75     0.01                             main (ComAnalyste.c:429 @ 804b19f)
        0.54      1.76     0.01                             main (ComAnalyste.c:444 @ 804b26f)
        0.54      1.77     0.01                             main (ComAnalyste.c:464 @ 804b4a1)
        0.54      1.78     0.01                             main (ComAnalyste.c:469 @ 804b570)
        0.54      1.79     0.01                             main (ComAnalyste.c:472 @ 804b5b9)
        0.27      1.80     0.01                             main (ComAnalyste.c:308 @ 804a5a3)
        0.27      1.80     0.01                             main (ComAnalyste.c:309 @ 804a5a9)
        0.27      1.81     0.01                             main (ComAnalyste.c:349 @ 804a974)
        0.27      1.81     0.01                             main (ComAnalyste.c:350 @ 804a99c)
        0.27      1.82     0.01                             main (ComAnalyste.c:402 @ 804af1d)
        0.27      1.82     0.01                             main (ComAnalyste.c:416 @ 804b073)
        0.27      1.83     0.01                             main (ComAnalyste.c:417 @ 804b0a1)
        0.27      1.83     0.01                             main (ComAnalyste.c:454 @ 804b3ec)
        0.27      1.84     0.01                             main (ComAnalyste.c:461 @ 804b44a)
        0.27      1.84     0.01                             main (ComAnalyste.c:462 @ 804b458)
      

      这是说每行花费的时间。这是非常有趣的结果。 我不知道它的准确性或有效性,但这很有趣。 希望对你有帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-22
        • 2012-09-19
        • 1970-01-01
        • 2014-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多