覆盖率测试工具gcov & lcov使用手册

原创 2016年03月14日 13:32:03

Gcov: 代码覆盖率工具

1.      编译

编译时gcc添加编译选项“gcc-fprofile-arcs“和”–ftest-coverage”:

e.g:gcc-fprofile-arcs  -ftest-coverage -otest test0309.c


编译完后会生成* .gcno文件

2.   执行

执行生成的可执行程序,gcda文件:

# ./test

#  ./test test.c test0309.gcno


Notes:

·        Gcov主要使用.gcno.gcda两个文件.

·        .gcno:gcov note文件,由-ftest-coverage编译参数产生,包含重建基本块图和相应块的源码的行号信息。

·        .gcda:由加了-fprofile-arcs编译参数的编译后的可执行文件运行产生。包含了弧跳变的次数和其他概要信息(程序运行完毕后才能产生)。

·        Gcov执行函数覆盖、语句覆盖、分支覆盖.

 

3.     收集信息


4.      报告:执行覆盖,生成*.gcov覆盖率文件

# gcov test0309.c        //如有多个文件则:gcov main.c,gcov tmp.c



(1)保存覆盖率报告文件:也可用 -c参数。

# gcov test0309.c >> yourfilename.gcov

e.g:gcov test0309.c >>abc.gcov

*.c.gcov文件就包含了函数和代码执行次数和测试的信息


// 前面的数字表明该clause被执行的次数

(2)分支测试:-b参数

//在.gcov文件中输出每个分支的执行频率及分支统计信息。

 # gcov-b test0309.c


(3)基本块统计:-a参数

               //在.gcov 文件中输出每个基本块的执行次数。若不加-a,则输出main函数的基本块次数

# gcov –a test0309.c


(6)函数执行次数和可执行函数的百分比:# gcov –f test0309.c


LCOV:图形化前端工具

Lcov则是上的gcov 结果展现的一个前端,可以将覆盖率信息转换成html文件输出。输出包括概述、覆盖率百分比、图表,快速浏览覆盖率数据。

1.    使用lcov收集覆盖率数据并写入文件:

使用lcov --directory .   --capture --output-file **.info生成info文件.

//  “.” 表示当前目录,收集coveragedata,即.gcda文件中的信息。并写入*.info文件.

e.g: #lcov --directory . --capture  --output-file test0309.info 


也可使用如下命令:

        # lcov -c -o test0309.info -d .

        # lcov -d . -t 'test0309' -o 'test0309.info'-b . -c

·        -d  . :参数 d指路径,"." 指当前路径

·        -t  "name" :指目标文件,这里 是 test0309

·        -o  "filename" :输出格式化后的信息文件名

可以查看生成的info文件信息:# cat test0309.info

·        TN: <Test name> 表示测试用例名称, 默认为空。

·        SF: <File name> 表示带全路径的源代码文件名。

·        FN: <函数启始行号>, <函数名>; <函数有效行总数>;<函数有效行总数中被执行个数>

·        FNF: <函数总数>

·        FNH: <函数总数中被执行到的个数>

·        BRDA: <分支所在行号>, <对应的代码块编号>, <分支编号>,<执行的次数>

·        BRF: <分支总数>BRH: <分支总数中被执行到的个数>

·        DA: <代码行号>, <当前行被执行到的次数>

·        LF: < counts> 代码有效行总数

·        LH: <counts> 代码有效行总数中被执行到的个数

 

2.  若要locv生成分支branch信息、输出基本块:

修改/etc/lcovrc文件,修改如下配置:

# vi /etc/lcovrc

# Include branch coverage datadisplay (can be disabled by the --no-branch-coverage option of genhtml)

                genhtml_branch_coverage = 1                         //去掉注释,值改为1.

# Specify if branch coverage data should be collected andprocessed.

lcov_branch_coverage = 1                             //去掉注释,值改为1




3.  获得HTML输出文件

genhtml:根据信息文件(.info)产生html 文档,输出到一个文件夹中。

执行 genhtml  -o  results  *.info就会生成result目录,生成的html文件就在result目录下。

e.g: # genhtml –o result test0309.info


进入result目录下,使用浏览器查看index.html文件。


针对CMake编译项目集成gcov和lcov代码覆盖率测试

1.   修改Makefile

在项目顶层目录修改Makefile文件,此处修改“CMakeList.txt”文件,为CXX_FLAGS_DEBUG、C_FLAGS_DEBUG、LINKER_FLAGS_DEBUG添加gcc编译选项“-fprofile-acrs–ftest-coverage” 如下:

set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}  -fprofile-arcs -ftest-coverage")

set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}  -fprofile-arcs -ftest-coverage")

set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG}  -fprofile-arcs -ftest-

coverage-lgcov")

Notes:CFLAGS 表示用于 C编译器的选项,CXXFLAGS表示用于C++编译器的选项。


2.      生成配置文件

# cmake ../mecfcgi-DCMAKE_BUILD_TYPE=Debug -DENABLE_GCOV=1

3.      编译:# make  

4.      看到每个.o文件生成对应的.gcno文件


5.   运行程序

(1)进入/root/xinshh/nes_sdk/mecfcgi/dist目录,执行strat-nes-hhtpd.sh脚本文件启动。

# sh start-nes-httpd.sh 


Notes: 若重新编译源码,需要给该脚本加上执行权限

# chmod 777 start-nes-httpd.sh

(2)进入/ /root/xinshh/nes_sdk/mecfcgi_build目录,运行相应程序:

# ./mecfcgi

#./mecfcgi-test


6.   生成.gcda文件


7.      使用lcov工具收集覆盖率并写入文件:

# lcov --directory . --capture --output-file mecfcgi_0311.info


8.      输出生成HTML结果文件:

# genhtml –o result mecfcgi_0311.info



9.      查看覆盖率信息:在result目录下的index文件打开浏览器查看。



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Linux平台代码覆盖率测试工具GCOV的前端工具LCOV简介

本博客http://blog.csdn.net/livelylittlefish 贴出作者(三二一@小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正! Content 1. Lcov是什么? ...

代码覆盖率——gcov lcov的使用

1.GCOV查看arm-linux代码覆盖率 一、           关于gcov工具 gcov伴随gcc 发布。gcc编译加入-fprofile-arcs -ftest-coverage 参...

gcov lcov覆盖率统计工具

gcov是一个可用于C/C++的代码覆盖工具,是gcc的内建工具。下面介绍一下如何利用gcov来收集代码覆盖信息。 1 下载,并安装 官方网站地址http://ltp.sourceforge.ne...
  • thq0201
  • thq0201
  • 2012年07月29日 15:54
  • 4270

GCOV的使用-测试代码覆盖率

1. gcov是什么? Gcov is GCC Coverage 是一个测试代码覆盖率的工具 是一个命令行方式的控制台程序 伴随GCC发布,配合GCC共同实现对C/...
  • heli007
  • heli007
  • 2012年12月07日 12:59
  • 11201

使用gcov生成增量覆盖率报告

lcov可以统计指定目录下的所有代码覆盖率,当前有这样一个诉求:有两个版本的代码:v1和v2,想统计用例v2相对v1增加及修改的代码的覆盖情况,以确认针对这部分代码设计的用例是有效的。然而lcov不支...
  • Ls4034
  • Ls4034
  • 2017年06月08日 11:08
  • 580

使用gcov和lcov测试代码覆盖率

gcov与 lcov简介gcovgcov是Linux下GCC自带的一个C/C++代码覆盖率分析工具,因此只要安装了gcc,就不需要再次安装了lcovlcov介绍gcov能够生成代码覆盖信息,但是不够直...
  • hyb612
  • hyb612
  • 2017年08月06日 19:41
  • 254

测试代码覆盖率-GCOV的使用

测试代码覆盖率-GCOV的使用
  • guo8113
  • guo8113
  • 2016年08月03日 09:56
  • 978

Gcov 详解 + 内核函数覆盖率测试方法详述及产生错误解决办法

1. gcov是什么? Gcov is GCC Coverage 是一个测试代码覆盖率的工具 是一个命令行方式的控制台程序 伴随GCC发布,配合GCC共同实现对C/C++文件的语句覆盖和...

Linux平台代码覆盖率测试工具GCOV简介

本博客http://blog.csdn.net/livelylittlefish 贴出作者(三二一@小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正! Content   1. gcov是什么...

原创:gcov、lcov与genhtml 使用心得

http://blog.sina.com.cn/s/blog_7e4ac8b501018b27.html gcc是linux平台下的C、C++ 编译器 gcov是配合gcc产生覆盖信息...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:覆盖率测试工具gcov & lcov使用手册
举报原因:
原因补充:

(最多只允许输入30个字)