4

我正在使用 Ubuntu 12、g++ 和 lcov,后者安装了apt-get install lcov.

我正在成功编译并生成 html 报告genhtml。行覆盖信息看起来不错,但许多函数覆盖计数似乎很奇怪。例如,一个仅包含构造函数和虚拟析构函数的 C++ 类被 lcov 报告为具有 7 个函数。因此,如果我在会议期间同时打电话,我的覆盖率只有 2/7。

这是一个示例输出,它显示了一个具有一个永远不会被调用的函数的类。我无法弄清楚该功能是什么:

示例输出

任何人都可以解码损坏的函数名称,解释膨胀的函数计数,并建议如何解决问题吗?

提前致谢。

更新

好的,因为在下面回答了我最初的问题(见评论),我现在就如何防止这些幕后的 ctors 和 dtors 破坏我的函数覆盖率统计数据提出建议。如何将函数计数限制为我自己编写的那些函数?

4

1 回答 1

1

我想你现在正在进行一个新项目,当时你可能没有使用 C++11,但如果你现在这样做,也许这会有所帮助:

class my_class
{
    ...
    my_class(my_class const &) = delete;
    ...
};

这也意味着您必须对所有可能的默认构造函数进行某种形式的声明,而这些默认构造函数是您不想拥有的……现在,如果您使用的是默认构造函数,那么您可能需要增强测试,因为 lcov 告诉您你实际上并没有测试它们!应该做的事情:

my_class a;
my_class b(a);
my_class c;
c = b;
于 2014-05-30T07:16:48.883 回答