GCC高级测试功能扩展——程序性能测试工具gprof、程序覆盖测试工具gcov
2017-11-02 23:11
399 查看
很多年前将服务器代码从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
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
- Linux下C++ 性能测试工具GPROF()入门教程
- .NET程序内存分析工具CLRProfiler的使用(性能测试)
- Erlang程序的性能测试工具(1)
- gcov命令_Linux gcov 命令用法详解:测试程序的代码覆盖率的工具
- 性能测试工具VTune的功能和用法介绍
- 功能测试工具QTP & 性能测试工具LoadRunner使用总结
- Linux下gprof和oprofiling性能测试工具
- 【转载】十一种Web网站程序性能测试工具介绍
- gcc 的性能测试工具
- gprof---Linux程序性能分析工具
- 测试工具:用性能监视器查看程序的性能
- gprof---Linux程序性能分析工具
- Linux C++程序进行性能分析工具gprof使用入门
- Linux C++程序进行性能分析工具gprof使用入门
- Android程序性能测试工具
- [推荐] kylinPET是一款功能强大的性能测试工具
- 十一种Web网站程序性能测试工具介绍
- 程序性能分析工具gprof介绍
- linux高级工具命令(三)使用gprof和oprofile查找性能瓶颈