【问题标题】:Accurate function counts with lcov and g++使用 lcov 和 g++ 进行准确的函数计数
【发布时间】:2012-07-10 14:30:23
【问题描述】:

我使用的是 Ubuntu 12、g++ 和 lcov,后者使用 apt-get install lcov 安装。

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

这是一个示例输出,它显示了一个具有一个永远不会被调用的函数的类。我不知道那个函数是什么:

example output

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

提前致谢。

更新

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

【问题讨论】:

  • 好的,多一点挖掘,使用c++filt 命令解开名称,帮助我解决了这个问题。答案与自动生成的构造函数和析构函数有关。在引擎盖下,比我意识到的要多得多。看到一个很好的解释here on StackOverflow
  • 你应该提供这个作为答案而不是评论。

标签: lcov


【解决方案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;

【讨论】:

  • 亚历克西斯,谢谢!我现在确实在另一个项目中,但我仍然感谢您的回复。您对未测试的默认构造函数的评论是一个很好的观察。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 2012-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-10
  • 2018-07-15
相关资源
最近更新 更多