我有一个由几个.h和.c文件和许多函数组成的程序。还有一些功能可以调用其他功能等。 现在,这实际上是一项任务,所以我知道该计划需要多长时间才能达到目的。
问题是,与我给出的时间相比,我的程序花费了太多时间。 是否有可能找出哪个函数花费了太多时间或者代码的哪个部分正在按下程序?
我没有在这里给出代码,因为它太长了。我知道没有人能回答为什么“我的节目”很慢但我说话一般! 是否有工具可以衡量每个功能需要多长时间或类似的功能? 我正在使用gcc而且我在Linux上。
答案 0 :(得分:9)
由于您使用的是Linux,因此您可能已经安装了gprof
探查器。 gprof
的最基本用法是使用-pg
选项进行编译(获取信息输出也需要-g
选项)。 e.g。
> gcc -g -pg -o my_executable my_file.c
现在,您可以正常运行程序。然后你运行
> gprof my_executable > profile.txt
将分析信息输出到profile.txt
。这些数据看起来有点像
Flat profile:
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls ms/call ms/call name
33.34 0.02 0.02 7208 0.00 0.00 open
16.67 0.03 0.01 244 0.04 0.12 offtime
16.67 0.04 0.01 8 1.25 1.25 memccpy
16.67 0.05 0.01 7 1.43 1.43 write
16.67 0.06 0.01 mcount
0.00 0.06 0.00 236 0.00 0.00 tzset
0.00 0.06 0.00 192 0.00 0.00 tolower
0.00 0.06 0.00 47 0.00 0.00 strlen
0.00 0.06 0.00 45 0.00 0.00 strchr
0.00 0.06 0.00 1 0.00 50.00 main
0.00 0.06 0.00 1 0.00 0.00 memcpy
0.00 0.06 0.00 1 0.00 10.11 print
0.00 0.06 0.00 1 0.00 0.00 profil
0.00 0.06 0.00 1 0.00 50.00 report
[...]
并且您可以读取有关每个函数的一些数据(例如,open
被称为7208次,而执行它的时间为0.02。)。这个示例数据是从this guide借来的,您应该阅读它,因为它提供了更多的解释,并描述了如何操纵分析以获得逐行分析等内容。
答案 1 :(得分:1)
正如上面的dbaupp所建议的,gprof是一个很好的linux工具。除此之外,如果您有权访问IBM Rational Quantify,也可以尝试访问{{3}}。它是一种商业工具,但提供了功能的良好图形视图,需要更多时间和呼叫流程等。