2009-04-24 106 views
2

我正在尝试使用gcov首次测量测试覆盖率。现在我已经过了最初的学习曲线,事情似乎进展顺利,除了一个小小的障碍。我希望这可以归结为我缺乏理解,所以我希望有人熟悉gcov可以解释发生了什么。为什么gcov报告一个良好使用的类的头文件0%的覆盖率?

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

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

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

- 编辑 -

由于lacqui指出的下方,如果标题没有可执行的代码,它不应该被纳入覆盖范围计算。事实上,在我的所有类中,该特定的头文件是gcov试图为其生成覆盖信息的唯一头文件。

我已经做了一个逐行比较与其他头,我发现最大的区别是这个特定的头没有明确的构造函数或析构函数,而其他人做。为了尽量减少文件之间的差异,我在问题类中添加了一个明确的ctor和dtor。但是,这没有任何区别。

+0

你能向我们展示标题吗? – user44511 2009-04-24 04:18:24

回答

3

它看起来像我已经解决了这个问题。正如我所预料的那样,这比什么都更缺乏经验问题。

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

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

2

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

3

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

相关问题