如何在Gcovr上显示分支覆盖的真/假条件

时间:2018-03-15 16:56:22

标签: gcov gcovr

我一直试图在我执行的测试用例的分支上找到哪个条件。 例如,这是我从Gcov的gcov -b获取的覆盖信息的一小部分(为了便于阅读,我还使用了-i选项):

lcount:10,1
branch:10,nottaken 
branch:10,taken    

在检查了一些样本后,似乎始终首先在每个分支信息上写入真实条件。这意味着我可以确定执行的测试用例是否采用分支的真实部分或错误部分。在这种情况下,测试用例占用了第10行的分支的错误部分。

现在,这是由Gcovr的同一程序和测试用例的--branches--xml生成的xml的剪辑:

<line branch="true" condition-coverage="50% (1/2)" hits="1" number="10">
   <conditions>
      <condition coverage="50%" number="0" type="jump"/>
   </conditions>
</line>

在这里,我无法弄清楚分支的哪个部分被采用。

我可以使用Gcovr的任何选项吗?

1 个答案:

答案 0 :(得分:0)

gcovr XML输出使用Cobertura XML格式,该格式可被各种其他工具理解。这意味着gcovr仅限于该XML架构,并且不能包含额外信息。

Gcovr的HTML报告(--html-details)显示分支覆盖率。要查看哪些分支被发现,通常最容易看到条件分支中的哪些语句被发现。但是,分支覆盖列还会显示小图标,指示采取了哪些分支。每个分支有一个指标/每个条件两个。绿色✔表示覆盖的分支,红色✘表示未覆盖的分支。

screenshot of branch indicators in a gcovr HTML report

在上面的例子中,第一个分支被揭开。第一个分支是对应于真或假条件是未定义。如果有疑问,请将代码重写为仅使用语句级条件(无… ? … : …&&||运算符),以便所有分支都是单独的语句。请注意,在C ++中,异常处理可能会引入可能难以/无法覆盖的其他分支。

提示:获取分支覆盖率不需要--branch选项。它仅控制gcovr文本报告是否显示分支或行覆盖。