【发布时间】:2020-08-06 15:55:30
【问题描述】:
有谁知道 gcov(用于 C 和 C++)如何处理条件循环和无条件循环。具体来说,如果您有条件循环,则需要为循环测试 0、1 或更多。如果您有一个无条件循环,则不需要任何额外的测试。这是因为无论循环的输入是什么,无条件循环总是会执行 X 次(想想一个总是从 0 开始,总是以一个 const 值结束的 for 循环)。
问题是,gcov(和相关的报告工具)如何处理这个问题。如果循环是无条件的,则无法测试 0、1 或更多。这些工具是否考虑到了这一点,从而不会对您的总代码覆盖率产生负面影响?
【问题讨论】:
-
我不明白。 gcov 只计算源代码行的执行次数。如果循环是“有条件的”或“无条件的”(无论这意味着什么),它有什么区别?
-
@FredLarson:也有分支覆盖,但 OP 对(非)条件循环的定义似乎与覆盖无关。
-
对我来说
while (true){ /*..*/}是无条件循环(无条件跳转(即使编译器可能生成不需要的分支,这确实可能对覆盖工具产生负面影响))。for (int i = 0; i != 42; ++i)有条件分支,并且两个分支都在常规运行中覆盖(没有break)。 0、1、2+ 次运行似乎与路径或决策覆盖率更相关。 -
@Jarod42 这可能有助于参考:partiu.loggi.com/…
-
@FredLarson,请参阅上面评论中的链接,但如果 gcov 仅计算一行执行的次数,我想知道 CodeCov 之类的工具如何测量循环和分支条件。我觉得那里必须有更多信息,因为他们也需要区分 MC/DC 分支之间的区别,而您无法从简单的行数中获得。
标签: c++ c code-coverage codecov