我正尝试使用gcov首次测量测试覆盖率。现在我已经过了最初的学习曲线,事情似乎进展顺利,除了一点点障碍。我希望它归结为对我缺乏了解,所以我希望熟悉gcov的人可以解释发生了什么。
问题是我有一个显示0%覆盖率的特定头文件。但是,该标头中的仅事物是一个使用良好的类的类声明。
此外,该类的实现文件显示100%的覆盖率,我可以指向5个不同的测试,我知道该类正在成功实例化的事实。
那么为什么gcov会在课堂上报告0%的覆盖率,我该如何修复呢?
- 编辑 -
正如lacqui在下面指出的那样,如果标题没有可执行代码,则不应将其包含在coverage计算中。实际上,在我的所有类中,特定的头文件是gcov尝试为其生成覆盖信息的唯一文件。
我已经与其他标题进行了逐行比较,我发现最大的区别是这个特定的标题没有显式的构造函数或析构函数,而其他标题。为了尽量减少文件之间的差异,我在问题类中添加了一个显式的ctor和dtor。但是,这没有任何区别。
答案 0 :(得分:4)
看起来我已经解决了这个问题。正如我所料,这更像是一种缺乏经验的问题,而不是任何事情。
事实证明,gcov只找到了可用跟踪文件的子集,因此仅报告了总结果的一部分。查找并添加其余的跟踪文件解决了这个问题。
对于任何好奇的,有问题的头文件仍会显示在输出中。事实上,所有其他头文件也都这样做,即使它们不包含可执行代码。但是,它们都显示出90%以上的覆盖率。
答案 1 :(得分:3)
即使您没有明确创建隐式析构函数,它也会创建隐式析构函数。 如果在程序结束之前没有销毁对象,则永远不会调用此隐式析构函数。 gcov通过在类声明行上标记一个'0'计数器来表明这一点。
答案 2 :(得分:2)
您的头文件不包含已执行的代码。由于没有执行任何操作(类声明中没有执行的代码),因此无需测量,也无需覆盖。