GCC高级测试功能扩展——程序性能测试工具gprof、程序覆盖测试工具gcov
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 输出每个函数的使用信息
GCC高级测试功能扩展——程序性能测试工具gprof、程序覆盖测试工具gcov的更多相关文章
- Go测试,功能测试,性能测试,测试辅助,go test 工具,高级测试,IO相关测试,黑盒测试,HTTP测试,进程测试
go命令教程: http://wiki.jikexueyuan.com/project/go-command-tutorial/0.5.html Go测试 第一个测试 “Hello Test!” 首先 ...
- [原创] 上海招聘高级测试工程师(性能测试/自动化测试/App测试),长期有效
[原创] 上海招聘高级测试工程师(性能测试/自动化测试/App测试方向),长期有效 高级测试工程师(性能/自动化方向) 1.负责性能测试计划,性能需求分析,性能测试方案和用例设计,搭建性能测试环境,执 ...
- Asp.net mvc 5 CRUD代码自动生成工具- vs.net 2013 Saffolding功能扩展
Asp.net mvc 5 CRUD代码自动生成工具 -Visual Studio.net2013 Saffolding功能扩展 上次做过一个<Asp.net webform scaffoldi ...
- [推荐] kylinPET是一款功能强大的性能测试工具
[推荐] kylinPET是一款功能强大的性能测试工具 官方网站: http://www.kylinpet.com/
- 【转】测试开发工程师必备软硬能力&高级测试开发工程师需要具备什么能力?
对于测试的基本知识,可以查看软件测试相关书籍 对于在公司成为一位优秀的测试开发工程师,我觉得下面这篇文章涉及到的是我们需要的,稍微进行改动https://blog.csdn.net/sinat_210 ...
- 上海洋码头(www.ymatou.com)急招技术人才(职位:互联网软件开发工程师,.NET网站架构师,Web前端开发工程师,高级测试工程师,产品经理)
对公司招聘职位有兴趣的童鞋可以把简历发送到zhangzhiqiang@ymatou.com,我们HR会快速给你答复. 互联网软件开发工程师 岗位职责: 1.参与洋码头各个平台(www.ymatou.c ...
- LoadRunner调用Java程序—性能测试-转载
LoadRunner调用Java程序—性能测试 为了充分利用LoadRunner的场景控制和分析器,帮助我们更好地控制脚本加载过程,从而展现更直观有效的场景分析图表.本次将重点讨论LoadRunn ...
- vs.net 2013 Saffolding功能扩展
vs.net 2013 Saffolding功能扩展 Asp.net mvc 5 CRUD代码自动生成工具 -Visual Studio.net2013 Saffolding功能扩展 上次做过一个&l ...
- 功能测试很low?不能升级到高级测试工程师?
功能测试很low?不能升级到高级测试工程师? 功能测试很low?功能测试很简单?功能测试就是黑盒测试?功能测试没有技术含量?功能测试工资低?只会功能测试没有竞争力?功能测试这活初中生都可以干?功能测试 ...
随机推荐
- Selenium模拟登陆简书
from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.c ...
- BZOJ1004 HNOI Cards
第一次学习置换群这个东西. 这题需要利用Burnside定理. 即我们求出循环节为一(转完不变)的个数的平均数也就是等价类的个数. 定义:设G={a1,a2,…ag}是目标集[1,n]上的置换群.每个 ...
- Topcoder Srm 726 Div1 Hard
Topcoder Srm 726 Div1 Hard 解题思路: 问题可以看做一个二分图,左边一个点向右边一段区间连边,匹配了左边一个点就能获得对应的权值,最大化所得到的权值的和. 然后可以证明一个结 ...
- luoguP3250 [HNOI2016]网络 树链剖分 + 堆
机房某大佬告诉我,一条链在全局线段树中的区间最多有$log$段 因此同样的,代表不在这条链上的区间同样只有$log$段 对这$log$段区间进行维护即可 为了能够删除,在线段树的每个节点暴力维护一个堆 ...
- 2017-2018-1 JAVA实验站 冲刺 day06
2017-2018-1 JAVA实验站 冲刺 day06 各个成员今日完成的任务 小组成员 今日工作 完成进度 张韵琪 进行工作总结.博客.小组成员头像 100% 齐力锋 找背按钮声音 100% 张浩 ...
- git提交时”warning: LF will be replaced by CRLF“提示
今天把项目做完之后,然后用Git准备提交代码的时候,遇到warning: LF will be replaced by CRLF警告. 当时在网上查了资料,发现很多的解决办法都是:修改git全局配置, ...
- uva 6957 Hyacinth bfs
Hyacinth Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/problem/viewPro ...
- /etc/fstab 转
一./etc/fstab文件的作用 磁盘被手动挂载之后都必须把挂载信息写入/etc/fstab这个文件中,否则下次开机启动时仍然需要重新挂载. 系统开机时会主动读取/etc/fstab这个文件中的内容 ...
- Jquery UI 中Tree组件的json格式,java递归拼接demo
数据库中表数据,如下图: 实现的需求是,如果suporgcode数据为null 的情况下,表示在一级节点 "请选择" 的二级节点,然后是如:3和36 是1的子节点,一步一步的节点延 ...
- Android开发中适配多种 ROM 的快捷方式是如何实现的?
在安卓开发中,要提高开发效率,掌握一些快捷方式是必不可少的,特别是对于android入门阶段的童鞋而言,非常重要.今天小编在安卓开发教程网站上,搜罗了一些常用的Android 适配多种 ROM 的快捷 ...