GCC高级测试功能扩展——程序性能测试工具gprof、程序覆盖测试工具gcov
来源:互联网 发布:尚学堂大数据极限班 编辑:程序博客网 时间:2024/06/05 04:07
很多年前将服务器代码从Windows移植到Linux时,用过gprof进行过优化,非常有帮助。时隔多年,为了保留记忆,转一下这篇文章。
gprof是GNU组织下的一个比较有用的性能测试功能:
主要功能: 找出应用程序中消耗CPU时间最多的函数;
产生程序运行时的函数调用关系、调用次数
基本原理: 首先用户要使用gprof工具,必须在GCC编译该文件的选项中添加-pg选项,然后GCC会在用户应用程序的每一个函数中加入一个名为mcount(或者是_mcount、__mcount,这依赖于编译器或操作系统)的函数,即应用程序中每一个函数都要调用mcount函数,而mcount函数使用后会在内存中保存函数调用图,并通过函数调用堆栈的形式查找子函数和父函数的地址,这张调用图也保存了所有与函数调用相关的调用时间、调用次数等信息。当应用程序执行完毕,会在当前目录下产生gmon.out文件,gprof工具正是通过分析gmon.out文件才得出统计资料的。
使用gprof工具的主要格式:
gprof [选项] 用户应用程序 gmon.out
gprof命令选项:
-b 不再输出统计表格中的详细信息,仅显示简要信息
-p 只输出函数的调用图
-i 输出该统计总结信息
-T 以传统的BSD格式打印输出信息
-q 仅输出函数的时间消耗列表
-w width 设置输出的宽度
-e Name 不输出函数Name以及其子函数的调用图
-f Name 输出函数Name及其子函数的调用图
-z 显示从未使用过的函数信息
-D 忽略函数中未知的变量
gprof输出信息列表项解释:
name 函数名称
%time 函数使用占全部时间的百分比
cumulative seconds 函数累计执行的时间
self seconds 函数本身执行的时间
calls 函数被调用的次数
self call 每次调用,花费在函数上的时间
total call 每一次调用,花费在函数及其子函数的平均时间
使用gprof的步骤(假设要分析程序为test.c的性能、函数调用情况及函数调用时间):
(1)#gcc -pg -o test test.c
(2)#./test
(3)#gprof -b test gmon.out
程序覆盖测试工具gcov:
gcov是GNU组织旗下的一个程序覆盖测试工具。
主要功能: 程序中哪部分代码没有执行?
哪部分代码执行效率最高?
哪部分代码占用CPU时间最长?
哪部分代码消耗时间最短?
使用建议: 使用gcov进行程序覆盖性测试时,建议用户不要在gcc编译程序的命令中添加对代码的优化。
同gprof一样,gcov工具只能与GCC协同工作,而不能同其他的软件配套使用
使用步骤:(1)在GCC编译时必须添加 -fprofile-arcs -ftest-coverage 选项
(2)执行编译的可执行文件
(3)使用gcov命令分析代码运行的效率
gcov执行 格式:
gcov [选项] 用户程序
gcov命令选项:
-b 表示显示对分支的测试信息
-h 显示gcov的帮助信息
-v 显示gcov的版本信息
-n 不创建gcov的输出信息
-f 输出每个函数的使用信息
原文链接:http://www.cnblogs.com/nufangrensheng/archive/2013/11/16/3427192.html
- GCC高级测试功能扩展——程序性能测试工具gprof、程序覆盖测试工具gcov
- gprof : linux性能测试工具
- gcov代码覆盖测试工具使用
- Android程序性能测试工具
- gprof性能测试工具使用分析
- Linux性能测试工具:Oprofile, KFT, Gprof
- 【OI】gprof 性能测试工具 小结
- 代码覆盖率测试工具gcov
- 代码覆盖率测试工具gcov
- gcc 的性能测试工具
- Erlang程序的性能测试工具(1)
- 程序测试工具汇总
- linux环境下 C++性能测试工具 gprof + kprof + gprof2dot
- linux环境下 C++性能测试工具 gprof 和gprof2dot
- linux环境下 C++性能测试工具 gprof + kprof + gprof2dot
- linux环境下 C++性能测试工具 gprof + kprof + gprof2dot
- linux环境下 C++ 性能测试工具 gprof 和 gprof2dot
- linux环境下,C++性能测试工具 gprof+gprof2dot 研究
- 我是一个打了激素的数组
- C语言之static关键字的使用
- IM 即时通讯单例发送消息
- HashSet与HashMap的区别
- CCITT标准G726编解码实例
- GCC高级测试功能扩展——程序性能测试工具gprof、程序覆盖测试工具gcov
- 安装JDK
- [笔记]渗透测试基础
- MVP
- [BFS] HDU 2612
- 83-Remove Duplicates From Sorted List
- 使用脚本发送命令到控制台
- java基础随笔
- 机器学习笔记(3)-SVM