代码之家  ›  专栏  ›  技术社区  ›  Bill B

为什么GCOV在一个使用良好的类的头文件上报告0%的覆盖率?

  •  3
  • Bill B  · 技术社区  · 15 年前

    我第一次尝试用 gcov . 现在我已经过了最初的学习曲线,事情似乎进展顺利,除了一个小障碍。我希望这归根结底是因为我对此缺乏理解,所以我希望熟悉GCOV的人能够解释发生了什么。

    问题是我有一个特定的头文件显示0%的覆盖率。然而 只有 头中的内容是一个使用良好的类的类声明。

    另外,类的实现文件显示了100%的覆盖率,我可以指向5个不同的测试,在那里我知道类被成功地实例化了。

    那么,为什么GCOV会报告全班0%的覆盖率,我如何修复它呢?

    --编辑——

    正如Lacqui在下面指出的,如果报头没有可执行代码,就不应该包含在覆盖率计算中。实际上,在我所有的类中,这个特定的头文件是gcov试图为其生成覆盖率信息的唯一头文件。

    我已经与其他头进行了逐行比较,我发现最大的区别是这个特定的头没有显式的构造函数或析构函数,而其他头则有。为了尽量减少文件之间的差异,我在problem类中添加了显式的ctor和dtor。然而,这并没有什么不同。

    3 回复  |  直到 7 年前
        1
  •  4
  •   Bill B    15 年前

    看来我已经解决了问题。正如我所料,这更多的是缺乏经验的问题。

    结果表明,gcov只找到了可用跟踪文件的一个子集,因此只报告了总结果的一部分。找到并添加其余的跟踪文件解决了这个问题。

    对于任何好奇的人,有问题的头文件仍然显示在输出中。事实上,所有其他头文件也一样,即使它们不包含可执行代码。但是,它们都显示了90%以上的覆盖率。

        2
  •  3
  •   Vikas Tawniya Nicolas    7 年前

    C++创建隐式析构函数,即使尚未显式创建一个析构函数。 如果不在程序结束前销毁对象,则永远不会调用此隐式析构函数。 gcov通过在类声明行上标记“0”计数器来显示这一点。

        3
  •  2
  •   Kevin Lacquement    15 年前

    您的头文件不包含已执行的代码。由于没有执行任何操作(类声明中没有已执行的代码),所以没有要测量的内容,也没有要覆盖的内容。

    推荐文章