问题标签 [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 回答
402 浏览

python - 测量python进程中调用的C库的覆盖率

让我从示例开始——从 python 调用库代码。

这是库代码(编译成 library libfoolib):

这是调用它的python代码:

当库被编译-ftest-coverage并且-fprofile-arcs编译器正确生成gcno文件并且当 python 代码被执行时,gcda文件也被生成。问题是它只包含bar在 python 分叉之前被调用的函数的覆盖率。如果在foopython 的处理调用之外也调用了,那么一切都很好。

这是我gcov在生成的覆盖率数据上运行工具时得到的:

我的问题是“我的foo覆盖数据在哪里?”

有关环境的更多详细信息:

  • CentOS 5.4
  • gcc:4.1.2 20080704(红帽 4.1.2-46)
  • CMake 构建(版本 2.8.0)
  • 蟒蛇2.5
  • python to C 使用 SIP(​​版本 4.7.4)
0 投票
1 回答
6924 浏览

gcc - gcov 最终链接失败

在使用 gcov 支持编译我的项目时,我面临以下错误

以下是我在编译时拥有的标志信息

编译器标志:

链接器选项:

以下是版本信息:

gcc 版本:

gcc 版本 4.1.2 20080704(红帽 4.1.2-44)

gcov版本:

gcov (GCC) 4.1.2 20080704 (红帽 4.1.2-44)

错误:

/usr/lib/gcc/x86_64-redhat-linux/4.1.2/libgcov.a(_gcov.o) 中的隐藏符号“__gcov_init”被 DSO /usr/bin/ld 引用:最终链接失败:输出中的不可表示部分collect2: ld 返回 1 个退出状态

你能帮我摆脱这个问题吗?

0 投票
4 回答
13878 浏览

c++ - gcov 与 CMake 使用单独的构建目录

我正在努力获取 gcov 的覆盖信息。编译和链接期间没有错误,但是当我运行可执行文件时,没有生成覆盖数据。

我将 CMake 与单独的构建目录一起使用,以这种方式将标志传递给编译器和链接器:

可执行文件是否期望源代码位于特定位置?我必须在我的 CMakeLists.txt 中添加什么才能让事情顺利进行?

亲切的问候,比约恩

0 投票
3 回答
4345 浏览

c++ - 您对解释 gcov 输出以提高覆盖率有什么建议?

我在我的项目中成功使用了 gcov:

  • 我可以使用 gcov 标志构建我的项目:-fprofile-arcs -ftest-coverage
  • 我链接-lgcov选项
  • 我运行我的单元测试程序并生成了很多gcda文件gcno
  • 我运行 gcov 很多次并且gcov生成了很多文件。
  • 我总结了结果并生成了一个这样的行列表:
    • #####: 42: virtual double run_time() const { return 0; }

然后我去'doh!并编写一个调用该缺失方法的测试。

上面的示例行很容易诊断 - gcov 告诉我我没有调用的确切方法。

我还有一个由 gcov 标记的复制构造函数的示例,但我可以使用我的 Visual Studio 调试器逐步完成它。那里的解决方案是意识到 gcov 患有 RVO,它忽略了副本,但是编写了一个强制复制的测试来解决这个问题。

我还有其他几个我无法弄清楚的例子:

gcov 似乎在标记作为文件最后一行的命名空间的右括号。

gcov 想在这里告诉我什么?我想不出在这里打个电话。
更新 1:我检测到它FooBase有一个默认构造函数,就目前而言,如果仅由子类“调用”它与通过实例化它调用它是不同的gcov

更新 2:我一直在使用djgpp/gcc 4.4.4产生上述结果的方法。然而,通过使用MinGW/gcc 4.5.2“像差”消失,并通过更多的工作,我已经能够达到 100% 的线路覆盖率。

请为粗心的 gcov 用户写下您的答案,或者为我的一个示例提供答案。

0 投票
2 回答
595 浏览

c++ - 如何找到使用 dlopen() 打开的库的覆盖范围?

我有一个 C++ 库 (.so),它由另一个应用程序使用 dlopen() 打开。但是我需要在使用 gcov 的应用程序中运行时找到这个库的代码覆盖率。可能吗?如果是,怎么做?

如果不是,该问题如何解决?

0 投票
1 回答
775 浏览

c++ - gcov 和全局析构函数

MWE

}

问题

用 options 编译上面的-fprofile-arcs -ftest-coverage代码,运行程序,然后运行 ​​gcov。程序输出清楚地显示 Foo::Foo()、main() 和 Foo::~Foo() 是按此顺序调用的。gcov 输出显示调用了 Foo::Foo() 和 main(),但没有调用 Foo::~Foo()。

根本原因

全局对象由 GNU 内部退出处理程序(使用 at_exit() 注册的函数)销毁。最终的 gcov 统计信息由另一个退出处理程序生成。gcov 退出处理程序显然是在全局销毁退出处理程序之前调用的,因此 gcov 看不到被调用的析构函数。

错误状态

这是 gcov 中的一个古老错误。这是 Bugzilla 链接:http ://gcc.gnu.org/bugzilla/show_bug.cgi?id=7970 。九年后,该错误仍然存​​在,至少在 i686-apple-darwin10-g++-4.2.1 中。

问题

这是 gcov 中一个无法解决的错误,是我必须忍受的东西,还是只是碰巧从裂缝中溜走的东西(九岁,完全被遗忘了)?如果是后者,如何解决?

0 投票
2 回答
1316 浏览

c++ - 单元测试需要很长时间才能运行。瓦尔格林问题?新冠病毒问题?

我为我正在处理的项目创建了一个单元测试套件。我的单元测试过去运行得非常快......其中 200 多个将在几秒钟内运行。通常每个测试将花费不到 10 毫秒。现在,在使用 Valgrind 和 Gcov 时,每个测试可能需要超过 1.5 分钟才能运行!有没有人有过非常慢的单元测试的经验?Valgrind、gcov 或 Google Test 在任何特定情况下是否会导致程序执行显着减慢?更令人困惑的是,一些单元测试运行得很好(即非常快),而另一些则需要几秒钟才能运行。通常,当再次运行单元测试时,相同的测试需要不同的时间来运行。我基本上是想弄清楚瓶颈在哪里。下面是一个例子:

0 投票
3 回答
5965 浏览

code-coverage - 有没有办法将两个 .gcda 文件合并为一个?

我有几个针对应用程序的单元测试,每个测试都能够生成 .gcda 文件。我希望能够生成统一的 .gcda 文件,这些文件代表整个测试套件的覆盖范围。似乎没有一种简单的方法可以做到这一点,但我可能是错的,这就是我问的原因。

使用 gcov,是否可以合并到 .gcda 文件?之前有人问过,解决方案是转换为 lcov .info 文件并以这种方式合并。如果可能的话,我希望合并操作的输出仍然是单个 .gcda 文件,这样我就不会被迫使用 lcov。

0 投票
2 回答
10215 浏览

html - 寻找一种方法来排除 geninfo/genhtml 使用的文件

我们正在尝试使用 geninfo 和 genhtml(gcovr 的替代品,请参见此处)使用 gcov 提供的覆盖率生成 html 页面。

  • geninfo从 gcov 的 *.gcda 文件创建 lcov-tracefiles
  • genhtml从上述跟踪文件生成 html 文件

但是,最终结果不仅包括我们的代码,还包括来自 /usr/include 的文件。

有谁知道排除这些的方法?

我尝试查看手册页,但找不到任何内容http://linux.die.net/man/1/geninfo

0 投票
1 回答
3316 浏览

c - 即使程序中止,如何强制 gcov 提取数据

我正在使用一个名为 KLEE 的测试生成工具,它为我的 C99 代码创建了大量测试。之后我运行测试并使用 gcov 检查线路覆盖率。成功完成后,Gcov 似乎会在运行结束时更新覆盖率数据。

但是,某些测试会失败(断言不正确的语句),这会导致程序中止,并且 gcov 不计算此次运行中涵盖的行数。

有什么方法可以让 gcov 在任何退出时刷新信息(不仅在成功时)?