时间消耗分析-gprof


程序分析工具gprof介绍

程序分析是以某种语言书写的程序为对象,对其内部的运作流程进行分析。程序分析的目的主要有三点:一是通过程序内部各个模块之间的调用关系,整体上把握程序的运行流程,从而更好地理解程序,从中汲取有价值的内容。二是以系统优化为目的,通过对程序中关键函数的跟踪或者运行时信息的统计,找到系统性能的瓶颈,从而采取进一步行动对程序进行优化。最后一点,程序分析也有可能用于系统测试和程序调试中。当系统跟踪起来比较复杂,而某个BUG又比较难找时,可以通过一些特殊的数据构造一个测试用例,然后将分析到的函数调用关系和运行时实际的函数调用关系进行对比,从而找出错误代码的位置。

程序分析工具不同于调试器,它只产生程序运行时某些函数的调用次数、执行时间等等宏观信息,而不是每条语句执行时的详细信息。Gprof是Linux下一个强有力的程序分析工具。对于C、Pascal或者Fortran77语言的程序,它能够以“日志”的形式记录程序运行时的统计信息:程序运行中各个函数消耗的时间和函数调用关系,以及每个函数被调用的次数等等。从而可以帮助程序员找出众多函数中耗时最多的函数,也可以帮助程序员分析程序的运行流程。相信这些功能对于分析开源代码的程序员来说,有着相当大的诱惑力。

用gprof分析程序

用gprof对程序进行分析主要分以下三个步骤:

l         用编译器对程序进行编译,加上-pg参数。

l         运行编译后的程序。

l         用gprof命令查看程序的运行时信息。

先以一个简单的例子演示一下吧。随便找一个能够运行的程序的源代码,比如下面的文件test.c:

复制代码
 1 
 2 int IsEven(int x)
 3 
 4 {
 5 
 6        return 0 == x & 1;
 7 
 8 }
 9 
10 int main(int argc, char *argv[]
11 
12 {
13 
14        int i = 0;
15 
16        while(++< 1000) IsEven(i);
17 
18 }
复制代码


首先,用以下命令进行编译:

       [root@localhost]#gcc –o test –pg test.c

然后,运行可执行文件test.

       [root@localhost]#./test

运行后,在当前目录下将生成一个文件gmon.out,这就是gprof生成的文件,保存有程序运行期间函数调用等信息。

最后,用gprof命令查看gmon.out保存的信息:

       [root@localhost]#gprof test gmon.out –b

这样就有一大堆信息输出到屏幕上,有函数执行单间,函数调用关系图等等,如下:

Flat profile:

Each sample counts as 0.01 seconds.

 no time accumulated

  %   cumulative   self              self     total          

 time   seconds   seconds    calls  Ts/call  Ts/call  name   

  0.00      0.00     0.00     1000     0.00     0.00  IsEven(int)

 

                     Call graph

 

 

granularity: each sample hit covers 2 byte(s) no time propagated

 

index % time    self  children    called     name

                0.00    0.00    1000/1000        main [7]

[8]      0.0    0.00    0.00    1000         IsEven(int) [8]

-----------------------------------------------

 

Index by function name

 

   [8] IsEven(int)

以上介绍了gprof最简单的使用方法,下面针对其使用过程中的三个步骤详细说明。<

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值