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

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文件打开浏览器查看。



  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值