7

我有一个由几个 .h 和 .c 文件和许多函数组成的程序。还有调用其他函数的函数等等。现在,这实际上是一项任务,所以我知道程序需要多少时间才能完成。

问题是,与给定的时间相比,我的程序花费了太多时间。是否有可能找出哪个函数花费了太多时间或代码的哪个部分阻碍了程序?


我没有在这里给出代码,因为它太长了。我知道没有人能回答为什么“我的程序”很慢,但我说的是一般!是否有一个工具可以测量每个功能需要多少时间或类似的东西?我正在使用 gcc,我在 Linux 上。

4

2 回答 2

9

由于您使用的是 linux,因此您可能已经gprof安装了分析器。最基本的用法gprof是通过-pg选项编译(-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 秒。)。该示例数据是从本指南中借来的,您应该阅读该指南,因为它提供了更多解释并描述了如何操作分析以获得诸如逐行分析之类的内容。

于 2012-06-08T05:10:11.067 回答
1

正如上面 dbaupp 所建议的,gprof 是 linux 的优秀工具。除此之外,如果您有权访问IBM Rational Quantify,您也可以尝试。它是一个商业工具,但提供了需要更多时间的功能和调用流程等的良好图形视图。

于 2012-06-08T05:13:50.407 回答