我有几个针对应用程序的单元测试,每个测试都能够生成 .gcda 文件。我希望能够生成统一的 .gcda 文件,这些文件代表整个测试套件的覆盖范围。似乎没有一种简单的方法可以做到这一点,但我可能是错的,这就是我问的原因。
使用 gcov,是否可以合并到 .gcda 文件?之前有人问过,解决方案是转换为 lcov .info 文件并以这种方式合并。如果可能的话,我希望合并操作的输出仍然是单个 .gcda 文件,这样我就不会被迫使用 lcov。
我有几个针对应用程序的单元测试,每个测试都能够生成 .gcda 文件。我希望能够生成统一的 .gcda 文件,这些文件代表整个测试套件的覆盖范围。似乎没有一种简单的方法可以做到这一点,但我可能是错的,这就是我问的原因。
使用 gcov,是否可以合并到 .gcda 文件?之前有人问过,解决方案是转换为 lcov .info 文件并以这种方式合并。如果可能的话,我希望合并操作的输出仍然是单个 .gcda 文件,这样我就不会被迫使用 lcov。
有合并.gcda
文件的代码,但不幸的是,libgcov.a
它作为 gcc 的一部分被隐藏在其中。如果您退出(或以任何方式调用__gcov_flush()
)覆盖编译的程序,它实际上会检测预先存在的.gcda
文件,加载它们,将它们的数据与正在运行的程序的数据聚合,然后将其保存回来。我不知道有任何工具可以在命令行提供该功能。即使libgcov.a
您可能没有有用的钩子来做您想做的事情,并且必须从 gcc-core 发行版中获取源代码并对其进行修改。
我过去所做的只是将所有数据提取到带注释的源 ( .gcov
) 并在该级别聚合。该.gcda
格式能够存储比行覆盖信息(例如分支计数)更多的信息,并且libgcov.a
聚合知道如何组合这些信息(对于某些人来说,它不像求和那么简单)。
我刚刚创建了一个测试项目,它显示,AFAIKT,当单个测试应用程序使用不同的参数连续运行时,gcda 文件会在运行之间更新,并且运行 gcov 一次(我使用gcovr.py)会产生聚合覆盖率信息。
Gcov 软件包带有gcov-tool
可执行文件,能够合并 gcda 文件:
gcov-tool merge dir1 dir2
(.gcda 文件在dirN 中的位置必须相同)。生成的 .gcda 将存储在merged_profile
目录中(可以用-o
标志覆盖)。
Gcov-tool
主要用于与使用GCOV_PREFIX
或生成的一系列 .gcda 文件一起使用-fprofile-dir=XXX.%p
。
Gcov-tool 一次只能合并两个配置文件,但您可以使用包装器gcov-tool-many来规避这一点。