使用GCOV和LCOV测试C++代码覆盖率
目录1. GCOV和LCOV简介
GCOV
是一个测试代码覆盖率的工具,可以与GCC
一起使用来分析程序,以帮助创建更高效、更快的运行代码,并发现程序的未测试部分。由于GCOV
是一个命令行方式的控制台程序,需要结合LCOV
前端图形工具才能实现统计数据图形化。
简而言之,GCOV
用于给代码生成覆盖率信息,LCOV
用于生成可视化的代码覆盖率报告。
2. GCOV和LCOV安装
GCOV
一般GCC
自带,不需要下载安装。
以下是LCOV
工具的源码安装方法:
-
解压tar.gz
tar -zxvf lcov-1.14.tar.gz
- 进入解压后的目录
cd lcov-1.14
-
在环境变量配置中设置
LCOV
的安装路径:若在
bash
环境中:
vim .bashrc
# 在bashrc中添加:
export LCOV_HOME=$HOME/LCOV
source .bashrc
若在cshell
环境中:
vim .cshrc
# 在cshrc中添加
setenv LCOV_HOME $HOME/LCOV
source .cshrc
- 编译安装:
make install PREFIX=$LCOV_HOME
-
添加
LCOV
到PATH
:若在
bash
环境中:
vim .bashrc
# 在bashrc中添加:
export PATH=$LCOV_HOME/bin:$PATH
source .bashrc
若在cshell
环境中:
vim .cshrc
# 在cshrc中添加:
setenv PATH ${LCOV_HOME}/bin:${PATH}
source .cshrc
- 验证安装是否成功:
lcov --version
3. GCOV+LCOV测试代码覆盖率
使用GCOV
生成代码覆盖率数据需要在GCC编译的时候加上参数-fprofile-arcs
-ftest-coverage
,若项目中使用了CMake
,可以在CMakeLists.txt
中进行设置:
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
以如下代码为例,使用GCOV
和LCOV
生成代码覆盖率报告:
// test.c
#include<stdio.h>
int main(int argc, char* argv[])
{
if(argc > 1)
printf("AAAA\n");
else
printf("BBBB\n");
return 0;
}
- 编译时加上参数:
gcc -fprofile-arcs -ftest-coverage test.c -o test
# 此时将会生成test.gcno文件
- 执行可执行程序:
./test
# 此时将会生成test.gcda和test.gcno
- 使用
gcov
生成代码覆盖信息:
gcov test.c
# 将会生成test.c.gcov的代码覆盖信息,但看起来并不直观
- 使用
lcov
生成可视化的代码覆盖信息:
lcov -d . -t "test" -o "test.info" -b . -c
# -d 参数:指定.gcda所在路径
# -t 参数:指定标题
# -o 参数:指定生成的文件名
# -b 参数:指定生成gcno数据时编译的代码路径
# -c 参数:表示生成覆盖率数据
- 移除某些不需要进行代码覆盖率测试的目录:
lcov --remove test.info "*test*" -o filtered-test.info
# 不测试test目录下的文件
- 使用
genhtml
生成html报告:
genhtml -o result filtered-test.info
# -o 参数:指定生成的报告的目录名称
打开生成的报告目录result中的index.html就可以看到代码覆盖率数据了。
如下是生成的代码覆盖率报告示例:
标签:覆盖率,代码,C++,生成,GCOV,test,LCOV From: https://www.cnblogs.com/N1rv2na/p/18277742