Linux覆盖率一点研究:获取覆盖率数据
首先,当然哥不介意你鄙视我在网上找的资料研究!
白盒覆盖率是啥东东这个问题大家自己查百度啦!我也不太懂,就知道它不是个东西,就这样开始吧(MT一般是先摸四蹄呢还是先黑金币呢?这是个问题)!
首先:linux先Clear一下,然后呢再ls下。然后呢再找个CPP文件。其实生成覆盖率主要就一个参数的问题。因为g++那啥已经带了获取覆盖率的功能。
下面是执行获取覆盖率的一个流程:其中红色字体是敲入的重要命令。
[lixiang@localhost cjj]$ clear
[lixiang@localhost cjj]$ ls
ctest.c voctorTest.cpp
[lixiang@localhost cjj]$ g++ -fprofile-arcs -ftest-coverage voctorTest.cpp -o test
[lixiang@localhost cjj]$ ls
ctest.c test voctorTest.bb voctorTest.bbg voctorTest.cpp
[lixiang@localhost cjj]$ ./test
start test:
vector include num:120
end test
[lixiang@localhost cjj]$ ls
ctest.c test voctorTest.bb voctorTest.bbg voctorTest.cpp voctorTest.da
[lixiang@localhost cjj]$ gcov voctorTest.cpp
100.00% of 1 source lines executed in file /usr/include/c++/3.2.2/new
Creating new.gcov.
100.00% of 1 source lines executed in file /usr/include/c++/3.2.2/iostream
Creating iostream.gcov.
100.00% of 2 source lines executed in file /usr/include/c++/3.2.2/bits/stl_uninitialized.h
Creating stl_uninitialized.h.gcov.
42.86% of 14 source lines executed in file /usr/include/c++/3.2.2/bits/stl_algobase.h
Creating stl_algobase.h.gcov.
100.00% of 6 source lines executed in file /usr/include/c++/3.2.2/bits/stl_iterator.h
Creating stl_iterator.h.gcov.
100.00% of 4 source lines executed in file /usr/include/c++/3.2.2/bits/stl_construct.h
Creating stl_construct.h.gcov.
73.81% of 42 source lines executed in file /usr/include/c++/3.2.2/bits/stl_vector.h
Creating stl_vector.h.gcov.
100.00% of 6 source lines executed in file /usr/include/c++/3.2.2/bits/stl_alloc.h
Creating stl_alloc.h.gcov.
100.00% of 8 source lines executed in file voctorTest.cpp
Creating voctorTest.cpp.gcov.
[lixiang@localhost cjj]$ ls
ctest.c stl_construct.h.gcov voctorTest.bb
iostream.gcov stl_iterator.h.gcov voctorTest.bbg
new.gcov stl_uninitialized.h.gcov voctorTest.cpp
stl_algobase.h.gcov stl_vector.h.gcov voctorTest.cpp.gcov
stl_alloc.h.gcov test voctorTest.da
执行完后:其中覆盖率数据保存在voctorTest.cpp.gcov这个文件中。可以用cat命令查看覆盖率信息,查看的结果如下:
[lixiang@localhost cjj]$ cat voctorTest.cpp.gcov
#include "iostream"
#include<vector>
using namespace std;
int main()
1 {
3 vector<int> vec;
1 vec.push_back(120);
1 cout<<"start test:\r\n"<<endl;
1 cout<<"vector include num:"<<vec[0]<<"\r\n"<<endl;
1 cout<<"end test"<<endl;
1 return 0;
1 }
[lixiang@localhost cjj]$
其中文件每行前面的数字代表着执行的次数。如下图解释的一样一样的。该图也是拷贝其他文章的奥。

OK,这里覆盖率数据就算得到和显示出来并看到了,然后其实他们有的人还用LCov把该报告转换成html文件,由于哥今天安装了WinSCP神器软件,所以俺也准备试试,可以下载到本地来看看,有意思,好玩,好玩!LCov主要是看到第二篇文章。
坑爹了......... 哥hai 没安装LCov........ 无语中:
下载一个Lcov来安装,提示依赖项没有,添加个命令来执行nodeps 其中在nodeps前面要加”--“ 记住是两个”-“,不然会提示”-nodeps:unknown option“
安装时又提示:cannot get exclusive lock on /var/lib/rpm/packages
该问题我猜是由于安装软件莫得权限,然后查资料果然正确,需要root权限,但是想到root权限安装的软件普通用户是不是基本都能用呢?所以我试下:
经过上面的折腾,觉得应该正确安装命令应该是:
rpm -ihv --nodeps lcov-1.10-1.noarch.rpm
参考文章:http://linux.sheup.com/linux/linux5218.htm
http://www.jb51.net/os/RedHat/1277.html
好辛苦,终于安装LCov成功了。安装过程中还遇到几个问题。
rpmdb:unable to join the environment
该问题主要是由于文件出了问题样,应该是系统文件,然后参考如下文章:http://blog.csdn.net/avilifans/article/details/17751545
使用export LD_ASSUME_KERNEL =2.2.25这个命令,即可解决了。
安装成功LCov后:
[lixiang@localhost lixiang]$ lcov
lcov: Need one of options -z, -c, -a, -e, -r, -l, --diff or --summary
Use lcov --help to get usage information
[lixiang@localhost lixiang]$
然后执行LCov,下面是整个命令过程,红色加粗为输入命令:
[lixiang@localhost lixiang]$ ls
file SaveSoft
[lixiang@localhost lixiang]$ lcov
lcov: Need one of options -z, -c, -a, -e, -r, -l, --diff or --summary
Use lcov --help to get usage information
[lixiang@localhost lixiang]$ [lixiang@localhost lixiang]$ lcov
-bash: [lixiang@localhost: command not found
[lixiang@localhost lixiang]$ lcov: Need one of options -z, -c, -a, -e, -r, -l, --diff or --summary
-bash: lcov:: command not found
[lixiang@localhost lixiang]$ Use lcov --help to get usage information
-bash: Use: command not found
[lixiang@localhost lixiang]$ [lixiang@localhost lixiang]$
-bash: [lixiang@localhost: command not found
[lixiang@localhost lixiang]$ ls
file SaveSoft
[lixiang@localhost lixiang]$ cd file
[lixiang@localhost file]$ ls
addpe c shellscript
[lixiang@localhost file]$ cd addpe
[lixiang@localhost addpe]$ ls
add.c add.o cjj main.c makefile prcessadmin
add.h CExample1.c ExTest main.o oldfile TestOpenFile.c
[lixiang@localhost addpe]$ cd cjj
[lixiang@localhost cjj]$ ls
ctest.c stl_construct.h.gcov voctorTest.bb
iostream.gcov stl_iterator.h.gcov voctorTest.bbg
new.gcov stl_uninitialized.h.gcov voctorTest.cpp
stl_algobase.h.gcov stl_vector.h.gcov voctorTest.cpp.gcov
stl_alloc.h.gcov test voctorTest.da
[lixiang@localhost cjj]$ lcov -c -d ./ -o app.info
Capturing coverage data from ./
Found gcov version: 3.2.2
Scanning ./ for .da files ...
Found 1 data files in ./
Processing voctorTest.da
geninfo: WARNING: cannot find an entry for iostream.gcov in .bb file, skipping file!
geninfo: WARNING: cannot find an entry for new.gcov in .bb file, skipping file!
geninfo: WARNING: cannot find an entry for stl_algobase.h.gcov in .bb file, skipping file!
geninfo: WARNING: cannot find an entry for stl_alloc.h.gcov in .bb file, skipping file!
geninfo: WARNING: cannot find an entry for stl_construct.h.gcov in .bb file, skipping file!
geninfo: WARNING: cannot find an entry for stl_iterator.h.gcov in .bb file, skipping file!
geninfo: WARNING: cannot find an entry for stl_uninitialized.h.gcov in .bb file, skipping file!
geninfo: WARNING: cannot find an entry for stl_vector.h.gcov in .bb file, skipping file!
geninfo: WARNING: no data found for /usr/include/c++/3.2.2/iostream
geninfo: WARNING: no data found for /usr/include/c++/3.2.2/bits/stl_algobase.h
geninfo: WARNING: no data found for /usr/include/c++/3.2.2/bits/stl_vector.h
geninfo: WARNING: no data found for /usr/include/c++/3.2.2/bits/stl_alloc.h
geninfo: WARNING: no data found for /usr/include/c++/3.2.2/bits/stl_construct.h
geninfo: WARNING: no data found for /usr/include/c++/3.2.2/bits/stl_iterator.h
geninfo: WARNING: no data found for /usr/include/c++/3.2.2/bits/stl_uninitialized.h
geninfo: WARNING: no data found for /usr/include/c++/3.2.2/new
Finished .info-file creation
[lixiang@localhost cjj]$ ls
app.info test voctorTest.bbg voctorTest.da
ctest.c voctorTest.bb voctorTest.cpp
[lixiang@localhost cjj]$ cat app.info
TN:
SF:/home/lixiang/file/addpe/cjj/voctorTest.cpp
DA:5,1
DA:6,3
DA:7,1
DA:8,1
DA:9,1
DA:10,1
DA:11,1
DA:12,1
LF:8
LH:8
end_of_record
[lixiang@localhost cjj]$ genhtml app.info -o cc_result
Reading data file app.info
Found 1 entries.
Found common filename prefix "/home/lixiang/file/addpe"
Writing .css and .png files.
Generating output.
Processing file cjj/voctorTest.cpp
Writing directory view page.
Overall coverage rate:
lines......: 100.0% (8 of 8 lines)
functions..: no data found
[lixiang@localhost cjj]$
其中:
lcov:我想查看下LCov是否安装成功。(证明了在root下安装的软件可以在普通用户下使用。但是注意,我安装的时候用普通用户的保存的安装包好像有点问题。)
lcov -c -d ./ -o app.info:这条命令是创建覆盖率中间文件app.info 该文件可以用cat、vi查看。前提该文件夹下有gcov后缀的文件存在,即该文件是生成覆盖率信息的文件夹下。
genhtml app.info -o cc_result:通过lcov自带的genhtml转换为html文件并放在cc_result文件夹下。
获取到的覆盖率结果如下:

总结获取覆盖率步骤:
1. 编译链接带覆盖率参数的源代码;
2. 运行测试程序;
3. 使用gcov获取文本形式的覆盖率数据;
4. 使用lcov获取html形式的覆盖率数据;
参考了这篇文章:
http://blog.163.com/bobile45@126/blog/static/96061992201382025729313/
http://linux.ctocio.com.cn/85/12444085.shtml
Linux覆盖率一点研究:获取覆盖率数据的更多相关文章
- I.MX6 Android Linux shell MMPF0100 i2c 获取数据
#!/system/bin/busybox ash # # I.MX6 Android Linux shell MMPF0100 i2c 获取数据 # 说明: # 本文主要记录通过shell脚本来获取 ...
- Linux中Curl命令couldn't connect to host解决方案 php操作Curl(http,https)无法获取远程数据解决方案
本人在做百度账户第三方登录接口,获取百度token,利用php操作curl post方式发送请求token,出现couldn't connect to host错误.经过调试测试,最后终于成功.回头写 ...
- 室内定位系列(二)——仿真获取RSS数据
很多情况下大家都采用实际测量的数据进行定位算法的性能分析和验证,但是实际测量的工作量太大.数据不全面.灵活性较小,采用仿真的方法获取RSS数据是另一种可供选择的方式.本文介绍射线跟踪技术的基本原理,以 ...
- Opencv+MFC获取摄像头数据,显示在Picture控件
分为两步:OpenCV获取摄像头数据+图像在Picture上显示 第一步:OpenCV获取摄像头数据 参考:http://www.cnblogs.com/epirus/archive/2012/06/ ...
- JSONP 跨域请求 - 获取JSON数据
如何用原生方式使用JSONP? 下边这一DEMO实际上是JSONP的简单表现形式,在客户端声明回调函数之后,客户端通过script标签向服务器跨域请求数据,然后服务端返回相应的数据并动态执行回调函数. ...
- C#开发微信门户及应用(14)-在微信菜单中采用重定向获取用户数据
我曾经在系列文章中的<C#开发微信门户及应用(11)--微信菜单的多种表现方式介绍>中介绍了微信菜单里面的重定向操作,通过这个重定向操作,我们可以获取一个code值,然后获取用户的open ...
- linux c程序中获取shell脚本输出的实现方法
linux c程序中获取shell脚本输出的实现方法 1. 前言Unix界有一句名言:“一行shell脚本胜过万行C程序”,虽然这句话有些夸张,但不可否认的是,借助脚本确实能够极大的简化一些编程工作. ...
- android—获取网络数据
取网络数据主要靠发交易(或者说请求,接口等),而这些交易由java中的网络通信,HttpURLConnection和HttpClient实现,以下是具体例子. 大家都知道,网络通信,发送请求有两种 ...
- Jquery 模板插件 jquery.tmpl.js 的使用方法(1):基本语法,绑定,each循环,ajax获取json数据
jquery.tmpl.js 是一个模板js ,主要有2个方法 (1):$.template()方法,将一段script或者是Html编译为模板,例如 $.template('myTemplate' ...
随机推荐
- CentOS7下zip解压和unzip压缩文件
1.安装zip.unzip应用. yum install zip unzip
- Traveling in Blade & Soul
Traveling in Blade & Soul Walking is too simple. Having trained their physics and spirits for ye ...
- HttpHandler
HttpHandler初探 一.HttpHandler简介 HttpHandler是asp.net真正处理Http请求的地方.在这个HttpHandler容器中,ASP.NET Framework才真 ...
- LNAMP服务器环境搭建(手动编译安装)
LNAMP服务器环境搭建(手动编译安装) 一.准备材料 阿里云主机一台,操作系统CentOS 6.5 64位 lnamp.zip包(包含搭建环境所需要的所有软件) http://123.56.144. ...
- AutoHotkey(AHK)
这是2009年用过的一个软件,自动键盘执行的一个东西,能提高效率,代替人工击键和鼠标操作,现在中文化很好了,如下地址是中文文档 http://ahkcn.sourceforge.net/docs/Tu ...
- 【转】responseText,responseBody,responseXML差别
为了做ajax的代理,研究了下服务器端的xmlhttp和客户端ajax中的xmlhttp,做了个比较 由于我一直使用JavaScript作为Asp的教本语言,所以比较起来更清楚.服务器端的xmlhtt ...
- 悟javascript ---------------20160705
1. 首先观察页面需求 如果js要书写多个,那么一定用到循环 或者加上if判断 或者用到switch switch (表达式){ case 值1 : 语句1 break; case 值2 : 语句 ...
- Xcode真机调试报错(证书的签发者无效)
Xcode真机调试时报错: dyld: Library not loaded: @rpath/libswiftAVFoundation.dylib Referenced from: /var/mobi ...
- VIM神器打造Javascript开发环境
http://xuyufish.com/vim%E7%A5%9E%E5%99%A8%E6%89%93%E9%80%A0javascript%E5%BC%80%E5%8F%91%E7%8E%AF%E5% ...
- 纯js开发防win7日历控件
不久前项目开发中遇到需要用js实现选择日期的需求,百度了下,确实一大把一大把的,但多少还是有些不符合当前需求,遂down了一份最接近的,然后修修改改,基本符合了... 先上几张效果图~~~ 需要输入时 ...