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

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

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

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

- 编辑 -

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

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

最佳答案

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

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

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

09-10 03:55
查看更多