我怎么告诉gcov忽略不可打击的C++代码行?

jch*_*chl 46 c++ code-coverage gcov

我正在使用gcov测量我的C++代码中的覆盖率.我希望得到100%的覆盖率,但是由于存在一些理论上无法触及的代码行(需要实现但从未调用过的方法,switch语句的默认分支等等)而受到阻碍).这些分支中的每一个都包含一个assert( false );语句,但是gcov仍然将它们标记为未命中.

我希望能够告诉gcov忽略这些分支.有没有办法给gcov这些信息 - 通过注释源代码或任何其他机制?

小智 37

请使用lcov.它隐藏了gcov的复杂性,产生了良好的输出,允许每次测试的详细输出,具有简单的文件过滤功能,以及 - 已经评论过的行的ta-taa - 行标记:

来自geninfo(1):

geninfo识别以下标记:

  • LCOV_EXCL_LINE
    • 包含此标记的行将被排除.
  • LCOV_EXCL_START
    • 标记排除部分的开头.当前行是本节的一部分.
  • LCOV_EXCL_STOP
    • 标记被排除部分的结尾.当前行不属于本节的一部分.

  • 我不喜欢"使用其他工具"形式的答案.我实际上想知道如何让gcov忽略行,并且没有切换到lcov的选项.所以这不回答这个问题. (21认同)

Sim*_*kup 6

可以使用称为gcovr的工具来汇总gcov的输出,并且(至少从3.4版开始)它支持与lcov相同的排除标记。

这个答案

geninfo可识别以下标记:

  • LCOV_EXCL_LINE
    • 包含该标记的行将被排除。
  • LCOV_EXCL_START
    • 标记排除部分的开头。当前行是此部分的一部分。
  • LCOV_EXCL_STOP
    • 标记排除部分的结尾。当前行不属于本节。

您也可以'LCOV''GCOV'或替换上面的内容'GCOVR'。他们都工作。