覆盖率工具gcov,lcov实践记录
背景
本文记录的是gcov和lcov在统计一个分布式数据库的代码覆盖率过程中遇到的问题。
介绍
*gcov是一个测试代码覆盖率的工具,随着gcc一起发布,不需要进行特别安装;而lcov是配合gcov生成覆盖率文件的工具,需要单独安装。
*lcov是基于源码安装的,下载源码解压后make install即可安装。在安装完成后,使用lcov -v可以正确查询到安装的lcov版本。
使用流程
1.首先,在使用前配置各个子目录下的Makefile.am文件,加入编译开关:
if COVERAGE:
CXXFLAGS+=-fprofile-arcs -ftest-coverage
AM_LDFLAGS+=-lgcov
endif
2.之后,使用如下编译命令进行编译:
sh build.sh init
./configure --perfix=~/build --with-test-case=no --with-coverage=yes
make -j all -C src/
make install
注意:编译过程中,不能加入–with-release参数;若加入该参数可能会导致产生的覆盖率文件只统计构造函数,而忽略其他函数,原因暂时未知。
3.编译完成后,使用deploy跑测试程序,并统计测试覆盖率,命令大体如下:
lcov --rc lcov_branch_coverage=1 -c -o ~/info/xxx.info -d .
4.基于统计出的覆盖率info文件,我们准备对其进行汇总分析,获得代码覆盖率的完整信息。但是在后续统计中发现,一些必然会跑到的入口函数在覆盖率文件中并没有被统计到,所以展开这次调查。
遇到的问题
1.Can’t locate PerlIO/gzip.gm in @INC ,该错误是在使用lcov工具收集info文件时产生的,使用的命令为:
lcov --rc lcov_branch_coverage=1