c/c++代码的unit-test中覆盖率的统计

本文介绍了如何使用gcov、lcov和genhtml工具进行C/C++代码的单元测试覆盖率统计。通过设置GCC编译参数,运行测试用例,然后利用gcov生成覆盖信息,lcov生成HTML报表数据,最后由genhtml生成可视化的HTML报告。在过程中遇到了缺少分支覆盖率统计的问题,通过修改lcov配置文件解决了问题。
摘要由CSDN通过智能技术生成

gcov lcov genhtml工具

     gcov伴随gcc 发布。gcc编译加入-fprofile-arcs -ftest-coverage 参数生成二进制程序,执行测试用例生成代码覆盖率信息。

使用这些工具产生代码覆盖率的统计,需要经过:编译参数设置&编译、运行、gcov生成覆盖信息、locv生成 html报表数据、genhtml根据报表数据生成可视化的html报告 这几个步骤

编译参数设置&编译

    用GCC编译的时候加上-fprofile-arcs -ftest-coverage选项,链接的时候也加上。
    fprofile-arcs参数使gcc创建一个程序的流图,之后找到适合图的生成树。只有不在生成树中的弧被操纵(instrumented):gcc添加了代码来清点这些弧执行的次数。当这段弧是一个块的唯一出口或入口时,操纵工具代码(instrumentation code)将会添加到块中,否则创建一个基础块来包含操纵工具代码。

    编译成功后,会生成各*.c对应的 *.gcno文件。*.gcno是由-ftest-coverage产生的,它包含了重建基本块图和相应的块的源码的行号的信息。

运行

    也就是执行单元测试进程,如果编译参数中加了gcov相关的参数后,执行结果会生成 各 *.c文件对应的 *.gcda文件。*gcda是由加了-fprofile-arcs编译参数的编译后的文件运行所产生的,它包含了弧跳变的次数和其他的概要信息(而gcda只能在程序运行完毕后才能产生的)。

 

gcov生成覆盖信息

     Gcov执行函数覆盖、语句覆盖和分支覆盖。gcov工具会生成各*.c文件对应的 *.c.gcov 文件,不过*.c.gcov在lcov命令执行后,会被删除。*.c.gcov包含了函数和代码执行次数的信息。

image

locv生成 html报表数据

Lcov则是上的gcov 结果展现的一个前端,可以将覆盖率信息转换成html展现,它用来解析*.c.gcov中晦涩的字符,生成代码覆盖的信息,并输出到文件(*.info),genhtml根据*.info文件生成html报告。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值