C++ `gprof`花在特定代码行上的时间
我一直在将C++ `gprof`花在特定代码行上的时间,c++,profiling,gprof,C++,Profiling,Gprof,我一直在将gprof探查器与g++结合使用 我的代码中有一个函数,它封装了行为的几个部分,这些部分与主函数有足够的关联,因此将它们拆分为各自的函数是没有意义的 我想知道在这些代码的每个方面花费了多少时间 所以,如果你想象代码是这样的 function(){ A A A B B B C C C } 如果A、B和C代表我感兴趣的特定代码部分,有没有办法让gprof告诉我在这些特定部分上花费了多少时间?这里有一个有用的资源供您使
gprof
探查器与g++
结合使用
我的代码中有一个函数,它封装了行为的几个部分,这些部分与主函数有足够的关联,因此将它们拆分为各自的函数是没有意义的
我想知道在这些代码的每个方面花费了多少时间
所以,如果你想象代码是这样的
function(){
A
A
A
B
B
B
C
C
C
}
如果A、B和C代表我感兴趣的特定代码部分,有没有办法让
gprof
告诉我在这些特定部分上花费了多少时间?这里有一个有用的资源供您使用:
对于较旧版本的gcc编译器,gprof-l
参数逐行分析指定
但是,较新版本的gcc使用
gcov
工具而不是gprof
来显示逐行分析信息。如果您使用的是linux,则可以使用linux perf而不是gprof,如下所述:
键入
perf report
并选择一个函数将允许您逐行获取有关函数中CPU时间在何处花费的信息。我知道这是一个老问题,但我找到了一个有趣的答案。
正如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)
这是说每行花费的时间。这是一个非常有趣的结果。
我不知道它的准确性和有效性,但它很有趣。
希望这对你有所帮助如果你想让程序运行得更快,@MikeDunlavey很遗憾这个问题被删除了。这个答案获得了192票。吼叫声