【问题标题】:Why line declared 'containing no code' in gcov为什么在 gcov 中声明“不包含代码”的行
【发布时间】:2013-08-21 14:32:40
【问题描述】:

我正在尝试使用 gcov 分析 c++ 程序中的代码覆盖率。我得到的一条输出线是:

//my_header.h.gcov
-:  349:    TArray<unsigned,1,8> my_var; 

根据gcov documentation,这意味着“第 349 行不包含代码”。

可以清楚地看到,这一行包含代码,即声明。 我真的很想了解那里发生了什么。

【问题讨论】:

  • 我认为这意味着没有可执行的代码,因此没有什么需要关注的覆盖范围。

标签: c++ gcc gcov


【解决方案1】:

声明实际上只是编译器的信息,不会生成可执行代码。因此,此文件中没有任何内容可以确定覆盖范围。

【讨论】:

  • 也许我不明白,但是像int x 这样的东西是在一行中声明和定义的。所以实际上它是“可执行代码”。为什么TArray&lt;unsigned,1,8&gt; x 不是可执行代码?编译器怎么知道它必须在那里什么都不做?
  • 如果TArray&lt;unsigned, 1, 8&gt;在构造函数中没有代码,那么程序在这一行就真的没什么可做的了。它只是信息“这种类型的变量存在于这个空间中”。你期望什么可执行代码?
  • 好的,谢谢,我想我明白了:如果有构造函数,就会在堆栈上创建一个对象,否则什么都不会发生......
  • @ProfHase85:没有更多上下文很难确定,但我认为这个对象不太可能在堆栈上创建。它更有可能出现在静态数据或对象的一部分中。
  • @ProfHase85:如果有构造函数,就会在堆栈上创建一个对象,否则什么都不会发生,这不是真的。创建了一个变量,只是没有使用代码来初始化它(函数中所有变量的创建--空间分配--通常合并为帧指针的单个增量,因此没有为每个变量的分配生成代码)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-17
  • 1970-01-01
  • 2013-10-27
  • 1970-01-01
  • 2020-06-16
相关资源
最近更新 更多