Loading

BullseyeCoverage —— C/C++代码覆盖率分析工具

安装

官网下载地址: https://www.bullseye.com/cgi-bin/download

安装过程中需要License, 可以申请评估版本的key或者直接从官网渠道购买

Ubuntu18.04为例:

/install --prefix /opt --key {LICENSE_KEY}

常用命令

  • BullseyeCoverage状态切换:
cov01 -1 # Enable BullseyeCoverage
cov01 -0 # Disable BullseyeCoverage
cov01 -s # Display BullseyeCoverage Status
  • 转换扫描结果为可读格式:
covhtml -f xxx.cov /home/xxx  # convert to html
covxml -f xxx.cov /home/xxx   # convert to xml
  • 合并多个扫描结果:
covmerge -c -f output.cov input1.cov input2.cov  # merge multi *.cov

使用步骤

假设BullseyeCoverage安装于/opt/BullseyeCoverage/bin

# cd CODE_BUILD_PATH
export PATH=/opt/BullseyeCoverage/bin:$PATH
export COVFILE=`pwd`/xxx.cov
export COVERAGE_REPORT=`pwd`/xxx_cov_report.xml
cov01 -1
make && test
covhtml -f xxx.cov /home/xxx

分析

https://www.bullseye.com/help/report-annotation.html
结果中的各种符号解析:

  • ->: 表示一个不完整的覆盖, 一般和T/F组合使用
  • / X: 表示下列情况之一已触达/未触达:
    • 函数 / lambda表达式被执行到
    • switch标签被执行到
    • try-catch语句块被执行到
    • for循环语句块被执行到
  • T / F: 表示当前判断bool的分支只跑了其中一个情况, TF表示均有覆盖到
  • t / f: 表示当前if的判断表达式里面的各个小分量的分支覆盖情况
  • k: 表示绝对的判断条件, 因为百分百会跑向某个分支,所以这个仅仅是为了标记而已
  • /: 表示事件被排除在汇总结果之外

*排除不想扫描的代码

  • 排除文件扫描:covselect -a '!**/*_test*.cpp' (排除当前目录下任意一级目录下的所有*_test*.cpp)
  • 排除代码块: #pragma BullseyeCoverage off / #pragma BullseyeCoverage on

参考文档

posted @ 2020-12-20 15:45  Suiyek  阅读(1078)  评论(0编辑  收藏  举报