我对一个应用程序进行了多个单元测试,每个测试都能够生成 .gcda 文件。我希望能够生成统一的 .gcda 文件,它代表我的测试套件的整体覆盖范围。似乎没有一个简单的方法可以做到这一点,但我可能是错的,这就是我问的原因。
使用 gcov,是否可以合并到 .gcda 文件? 之前曾被问过,解决方案是转换为 lcov .info 文件并以这种方式合并。如果可能的话,我希望合并操作的输出仍然是单个 .gcda 文件,这样我就不会被迫使用 lcov。
有代码可以合并
.gcda
文件,但不幸的是它被埋在 libgcov.a
中,它是作为 gcc 的一部分构建的。如果您退出(或以任何方式调用 __gcov_flush()
)使用覆盖率编译的程序,它实际上会检测预先存在的 .gcda
文件,加载它们,将其数据与正在运行的程序的数据聚合,然后将其保存回来。我不知道有任何工具可以在命令行提供该功能。即使使用 libgcov.a
,您也可能没有有用的钩子来执行您想要的操作,并且必须从 gcc-core 发行版中获取源代码并对其进行修改。
我过去所做的只是将所有数据提取到带注释的源(
.gcov
)并在该级别进行聚合。 .gcda
格式能够存储的不仅仅是行覆盖信息(例如分支计数),并且 libgcov.a
聚合知道如何组合这些信息(对于某些人来说,它并不像求和那么简单)。
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 来规避此问题。
gcovr.py)会产生聚合覆盖率信息。
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:无法打开数据文件,假设未执行
你能帮我吗?