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

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

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

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

1
gcc -pg SLIC.cpp -o SLIC

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

1
./SLIC

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

1
gprof ./SLIC > prof.log

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

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

(2):配合gprof2dot.py与dot工具的使用(我是安装在了Win10平台)

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

1.安装gprof2dot.py与dot

GitHub - jrfonseca/gprof2dot: Converts profiling output to a dot graph.

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

Source Code | Graphviz

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

3.首先通过命令行进入你安装gprof2dot.py的根目录:

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

5.结果如下:

(3):接上文补充几点可能无法产生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可能无效

参考文献:

(4条消息) gprof、gprof2dot.py、dot使用方法简介_Andy.Wang的博客-CSDN博客_gprof2dot