使用GCOV和LCOV测试C++代码覆盖率

使用GCOV和LCOV测试C++代码覆盖率

1. GCOV和LCOV简介

GCOV是一个测试代码覆盖率的工具,可以与GCC一起使用来分析程序,以帮助创建更高效、更快的运行代码,并发现程序的未测试部分。由于GCOV是一个命令行方式的控制台程序,需要结合LCOV前端图形工具才能实现统计数据图形化。

简而言之,GCOV用于给代码生成覆盖率信息,LCOV用于生成可视化的代码覆盖率报告

2. GCOV和LCOV安装

GCOV一般GCC自带,不需要下载安装。

以下是LCOV工具的源码安装方法:

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
  • 添加LCOVPATH

    若在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")

以如下代码为例,使用GCOVLCOV生成代码覆盖率报告:

// 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就可以看到代码覆盖率数据了。

如下是生成的代码覆盖率报告示例:

生成的代码覆盖率报告

posted @   N1rv2na  阅读(884)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示