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 输出每个函数的使用信息