用gcov检查UT对代码的覆盖率: 除了覆盖率之外,还可以得到代码的执行频率,执行时间跨度。这些数据可以帮助查看代码的质量。

  • 编译:
    • 编译时加相关的flag: 以下三选一即可
      • –coverage
      • -lgcov
      • -fprofile-arcs -ftest-coverage
      • 编译选项中最好加入 -g3 -O0,前者是为了增加调试信息,后者是为了禁用优化,免得覆盖率测试不准确。
    • 中间过程文件:
      • 编译之后会看到gcno文件
      • UT跑完之后会看到gcda文件
    • 到这里为止计算覆盖率需要的数据其实已经有了,剩下的恐怕是怎么解读结果了。
  • gcov 生成覆盖率的数据,但是可读性很差.gcov,通常会用一个gcovr.py的脚本做后续处理
    • gcov *.gcda 会得到每个文件对应的一个gcov文件
  • lcov 优化gcov生成的报告(.info),增加。也可以自己写一些py脚本实现。

  • genhtml 根据lcov的结果生成html

一些可能会碰到的问题:

  • 报告的格式可以有很多种,怎么选择:
    • .gcov, html, xml 等等的格式,当然是html看起来最舒服,不过如果要做其他什么处理或者对接其他什么展示工具,xml会常用一些。
  • 报告展示的数据怎么统计的,比如用了sonar,展示的数据貌似和gcov生成的数据是不一致的?
    • 尤其是百分比的显示,你会看到report的结果和soanr可能差距很大,也许是因为sonar的处理不一样,分母不一样。
    • sonar也许会选择读入所有源代码作为分母,而gcov生成的报告里往往是只有被执行到的那些文件才被计入分母中
    • 怎么破呢? 想通过gcov报告的一些参数设置来改变gcov报告的分母,貌似不行,目前我都没有找到解决的办法。
  • 相对路径什么的