问题标签 [gcov]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1461 浏览

c++ - gcov 不生成覆盖文件

我在 32 位机器上使用 -fprofile-arcs -ftest-coverage 标志交叉编译我的可执行文件以进行覆盖。生成的可执行文件我在 64 位的目标机器上运行它。

当我运行可执行文件时,它不会生成 .bb .bbg 和 .da 文件。可能是什么原因。

0 投票
1 回答
2638 浏览

gcc - 如何从 gcov 获得更准确的结果?

我正在使用 mingw gcc 4.4.0 试验 gcov。我得到了一些有趣但奇怪的结果。一个常见的模式是这样的......

鉴于之前的循环显然正在执行和退出,怎么可能return根本不执行呢?我想我是这里返回值优化的受害者,因为这个临时变量的类型是std::string.

问题是,我已经-O0在编译器选项中指定了。这些是我正在使用的确切编译器标志...

我最好的猜测是,并不是所有的优化都被禁用了-O0。当我注意到问题时,我可以开始一个一个地寻找特定的优化标志,但这似乎是一件奇怪的事情。

那么 - 我应该指定哪些标志才能从 gcov 获得合理的覆盖结果?

编辑

到目前为止,我认为我需要以下附加标志...

  • -fno-default-inline
  • -fno-内联

我不确定这两个都需要,尽管我认为它们都禁用了不同的特定类型的内联。

不过,我还没有找到任何方法来禁用返回值优化。这不是一个大问题,但它有点烦人。当目标是 100% 覆盖率时,由于这个问题,一些真正达到 100% 的文件将被报告为较少。grep 可以找到#####标记并显示它们是否用于return语句,但您仍然需要进行一些目视检查以检查问题是否纯粹是 RVO。

0 投票
4 回答
17602 浏览

c++ - 如何告诉 gcov 忽略不可命中的 C++ 代码行?

我正在使用 gcov 来测量我的 C++ 代码中的覆盖率。我想达到 100% 的覆盖率,但受到以下事实的阻碍:有些代码行在理论上是不可命中的(需要实现但从未调用的方法、switch语句的默认分支等) .)。这些分支中的每一个都包含一个assert( false );语句,但 gcov 仍将它们标记为未命中。

我希望能够告诉 gcov 忽略这些分支。有没有办法给 gcov 提供信息——通过注释源代码,或通过任何其他机制?

0 投票
1 回答
523 浏览

xcode - Xcode 中 gcov 的链接器错误

将 gcov 添加到 Xcode 项目时,出现链接器错误:找不到符号 __gcov_init 和 __gcov_merge_add。

这是在 Mac OS X 10.5 和 Xcode 3.1.4 上,它是一个 Quartz Composer 插件项目,我正在尝试将 gcov 添加到 OCUnit 测试用例目标中。基本 SDK 和部署目标都设置为 Mac OS X 10.5。GCC 版本设置为 4.0。

我能够使用 gcov 和 OCUnit 成功创建另一个(非常简单的)Quartz Composer Plugin 项目。我可能遗漏了一些东西,但两个项目之间的构建设置在任何可能影响 gcov 链接的东西上似乎都是相同的。(我看到的唯一区别是 C 语言方言,Interface Builder Compiler 的不工作项目中的一些额外设置,以及运行 Clang 的用户定义设置。)

任何建议,将不胜感激。

0 投票
1 回答
8999 浏览

code-coverage - gcov 可以处理共享对象吗?

我最近使用 gcov 来收集代码覆盖率信息。gcov 与可执行应用程序配合得很好 :) ,但是当我尝试加载 .so 文件时,出现此错误:未知符号 __gcov_merge_add。

然后我在谷歌上搜索,有人说将 -lgcov 添加到链接标志(LDFLAGS),我确实添加了这个选项,但它没有用。我还尝试了链接标志中的 --coverage 选项,无法摆脱此错误。

有人可以帮助解决这个问题吗?

谢谢你。

0 投票
1 回答
17786 浏览

c++ - gcov:从共享库生成 .gcda 输出?

.gcda是否可以通过运行链接到使用该--coverage选项构建的共享库的可执行文件来生成 gcov 数据文件(文件)?

基本上,我的主库由多个 c++ 文件编译到一个共享库中,然后是一个名为“test”的子目录,其中包含一个链接到并测试主库的测试程序。一切都编译得很好,并且.gcno为库源文件和测试源文件生成了文件。这些.gcda文件只是为测试源文件生成的,但我真的需要它们用于编译到共享库中的实际源文件。

有任何想法吗?

附加信息:

  • 都是 C++ 代码
  • 一切都是用 automake 生成的 make 脚本构建的
  • --coverage 选项是为共享库 Makefile.am 中的 lib_la_CPPFLAGS 和 lib_la_LDFLAGS 指定的
  • --coverage 选项在测试可执行文件 Makefile.am 中为 AM_CPPFLAGS 和 AM_LDFLAGS 指定
  • 测试源文件使用 Google Test(一个 C++ 单元测试框架)
0 投票
1 回答
2629 浏览

gcov - GCov 和 GCC,*.da 文件未创建

我正在使用 GCC 版本 3.3.6。-fprofile-arcs当我使用and检测我的目标文件时-ftest-coverage,会创建相应的*.bband*.bbg文件。

然后将目标文件链接到一个静态库libfoo.a中:
ar rcs libfoo.a foo1.o foo2.o.

最后,将一系列静态库链接在一起以创建我的可执行文件:
gcc -fprofile-arcs -o foo.o <static libraries linked all>

现在,当我运行映像时,不会创建 *.da 文件。有没有我遗漏的步骤?有没有人有任何其他建议?

谢谢。

0 投票
1 回答
3988 浏览

c++ - 如何使用 gcov 和 QMake 进行代码覆盖

我想在使用 QTestLib 编写的单元测试中使用 gcov。通过将其添加到我的 .pro 文件中,我设法在我的目标文件中生成了一些 .gcno 文件:

但是,当我运行时:

我得到了一堆用无用内容生成的 .gcov 文件(与我在网络上的教程中看到的完全不同):

我的源文件位于./MyProject/test/src目录下,我的所有目标文件都位于 src 下的 .obj 目录中(即:.MyProject/test/src/.obj)。所有二进制文件都在./MyProject/build目录中创建。

我错过了什么?

谢谢!

0 投票
1 回答
10780 浏览

c++ - 如何告诉 lcov 在哪里可以找到我的 .cpp 和 .h 文件?

我的源代码和构建树在make(构建和运行FooAndBarTests)之后看起来像这样(参见Makefile,将不同目录中的目标文件放入一个单独的目录中? ):

然后,我可以通过运行gcov -o obj/ ../src/Foo.cpp和.gcov 在测试目录中生成 .gcov 文件gcov -o obj/ ../src/Bar.cpp

但如果我跑步,lcov -d obj/ -c -o FooAndBarTests.lcov我会得到:

然后当我跑步时,genhtml FooAndBarTests.lcov我得到:

如何告诉 lcov 和 genhtml .cpp 和 .h 文件在哪里?

0 投票
4 回答
2695 浏览

assembly - x86 程序集分析

有谁知道一个可以给我 x86 指令执行计数的好工具。我看过 gcov,但想看看其他可能对我有帮助的选项。我的最终目标是能够调用此函数并为其提供我对模拟/分析感兴趣的函数,它将返回每条装配线执行的次数。欢迎任何建议:) 谢谢