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

问题描述 投票:0回答:4

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

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

code-coverage gcov
4个回答
4
投票

有代码可以合并

.gcda
文件,但不幸的是它被埋在
libgcov.a
中,它是作为 gcc 的一部分构建的。如果您退出(或以任何方式调用
__gcov_flush()
)使用覆盖率编译的程序,它实际上会检测预先存在的
.gcda
文件,加载它们,将其数据与正在运行的程序的数据聚合,然后将其保存回来。我不知道有任何工具可以在命令行提供该功能。即使使用
libgcov.a
,您也可能没有有用的钩子来执行您想要的操作,并且必须从 gcc-core 发行版中获取源代码并对其进行修改。

我过去所做的只是将所有数据提取到带注释的源(

.gcov
)并在该级别进行聚合。
.gcda
格式能够存储的不仅仅是行覆盖信息(例如分支计数),并且
libgcov.a
聚合知道如何组合这些信息(对于某些人来说,它并不像求和那么简单)。


2
投票

Gcov 软件包附带

gcov-tool
可执行文件,能够合并 gcda 文件:

gcov-tool merge dir1 dir2

(.gcda 文件在dirN 内的位置必须相同)。生成的 .gcda 将存储在 merged_profile

 目录中(可以使用 
-o
 标志覆盖)。

Gcov-tool

 主要与使用 
GCOV_PREFIX
-fprofile-dir=XXX.%p
 生成的一系列 .gcda 文件一起使用。

Gcov-tool 一次只能合并两个配置文件,但您可以使用包装器

gcov-tool-many 来规避此问题。


1
投票
我刚刚创建了一个测试项目,据我所知,当使用不同的参数连续运行单个测试应用程序时,gcda 文件会在运行之间更新,并且运行 gcov 一次(我使用

gcovr.py)会产生聚合覆盖率信息。


0
投票
我尝试按照你的建议去做:

gcov-tool 合并命令_node_1 命令_node_2 -o merged_dir

但是我收到错误:

merged_dir/merge.gcno:无法打开注释文件 merged_dir/merge.gcda:无法打开数据文件,假设未执行 merged_dir/commands_node_1.gcno:无法打开注释文件 merged_dir/commands_node_1.gcda:无法打开数据文件,假设未执行 merged_dir/commands_node_2.gcno:无法打开注释文件 merged_dir/commands_node_2.gcda:无法打开数据文件,假设未执行

你能帮我吗?

© www.soinside.com 2019 - 2024. All rights reserved.