覆盖率工具gcov,lcov实践

本文详述了gcov和lcov在统计分布式数据库代码覆盖率时的使用流程及遇到的问题,包括gcov的编译开关设置、 lcov的安装与使用,以及在离线环境下解决的PerlIO/gzip.gm缺失问题。还探讨了动态链接库对覆盖率统计的影响,最终发现--with-release编译选项可能导致覆盖率文件不完整,并通过在进程结束前调用__gcov_flush确保覆盖率数据写入。
摘要由CSDN通过智能技术生成

覆盖率工具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 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值