3

我第一次尝试使用gcov测量测试覆盖率。现在我已经过了最初的学习曲线,一切似乎都很顺利,除了一点点障碍。我希望这归结为我缺乏理解,所以我希望熟悉 gcov 的人可以解释发生了什么。

问题是我有一个特定的头文件显示 0% 的覆盖率。但是,该标头中唯一的内容是一个使用良好的类的类声明。

此外,该类的实现文件显示了 100% 的覆盖率,并且我可以指出 5 个不同的测试,我知道在这些测试中该类已成功实例化。

那么为什么 gcov 会报告课程的 0% 覆盖率,我该如何解决呢?

- 编辑 -

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

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

4

3 回答 3

4

看来我已经解决了问题。正如我所料,这更像是一个缺乏经验的问题,而不是任何事情。

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

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

于 2009-04-25T22:04:16.423 回答
3

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

于 2012-02-24T08:31:14.060 回答
2

您的头文件不包含已执行的代码。由于没有执行任何操作(类声明中没有执行的代码),因此无需测量任何内容,也无需涵盖任何内容。

于 2009-04-24T03:45:21.270 回答