gprof、gprof2dot.py、dot使用方法简介

通过gprof可以有效的对调用结构,运行时间等时间进行统计,在当前工具链中已存在gprof工具。

1)gprof使用步骤如下,以linapck为例:

1 在编译过程中添加-pg选项,命令如下:

gcc -pg linpack.c -o linpack_gprof

2 运行程序,运行结束之后会形成文件gmon.out,命令如下:

./linpack_gprof

3 使用gprof再次执行程序,并将结果重定位到prof.log中,命令如下:

gprof ./linpack > prof.log

分析prof.log就可以获得程序的调用关系、函数执行时间等信息。对gprof的分析方法见以下blog

http://blog.csdn.net/macky0668/article/details/6839517


2)以上方法仍然存在一个问题就是分析结果不够直观,特别是函数的调用关系。因此为解决以上问题,可以配合gprof2dot.py与dot工具的使用。

1 安装gprof2dot.py与dot

通过以下地址可获得gprof2dot.py

http://jrfonseca.googlecode.com/svn/trunk/gprof2dot/gprof2dot.py

以上地址直接就给出了gprof2dot.py的内容,因此直接新建一个python文件并拷贝网页中的内容即可,拷贝完成后还需要改变python文件的权限

chmod 744 gprof2dot.py

通过以下地址可获得graphviz,安装graphviz后可使用dot工具

http://www.graphviz.org/Download_source.php

安装方法如下:

./configure
make
sudo make install

在使用上述工具前,还需要先产生gmon.out文件。gmon.out文件的产生方法见上文

通过以下命令即可得到函数调用图

gprof ./linpack_gprof | ./gprof2dot.py -n0 -e0 |dot - Tpng -o output.png

结果如下:


还可通过以下命令得到函数调用图

gprof linpack_gprof > prof.log
./gprof2dot.py prof.log | dot -Tpng -o output.png

 结果如下: 



通过对比以上两种方法,可以发现第二种方法无法得到调用时间过短的函数调用关系


接上文补充几点可能无法产生gmon.out文件的情况:

  1,程序不是从main return或exit()退出,则可能不生成gmon.out。
  2,程序如果崩溃,可能不生成gmon.out。
  3,测试发现在虚拟机上运行,可能不生成gmon.out。
  4,程序忽略SIGPROF信号!一定不能捕获、忽略SIGPROF信号。man手册对SIGPROF的解释是:profiling timer expired. 如果忽略这个信号,gprof的输出则是:Each sample counts as 0.01 seconds. no time accumulated.
  5,如果程序运行时间非常短,则gprof可能无效。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值