编译器在代码覆盖率中生成代码

时间:2009-05-13 09:20:46

标签: c++ code-coverage

我使用g ++编译器在Linux上使用英特尔代码覆盖工具。对于特定类,coverage工具显示的功能比源代码中实际存在的功能多2/3。

这些额外功能是什么?它们是编译器生成的函数吗?

我从代码覆盖率中排除头文件。 我的课很简单,有空的ctor和dtor。

我想以下函数是由编译器生成的。

  1. 复制构造函数
  2. 作业运算符
  3. 宏(不在我的情况下)
  4. 信号槽连接机制(例如在Qt moc编译器中生成这些)

1 个答案:

答案 0 :(得分:1)

这个blog entry(关于使用GDB进行调试)解释了为什么你会看到“额外”的构造函数。

  

gcc为构造函数生成两个不同的函数体。一个是构造整个对象的常规对象,包括所有基础。另一个构造除虚拟基类之外的所有东西。碰巧的是,即使对于根本没有虚拟基础的类,gcc也会发出两个构造函数。