我有一个应用程序的几个单元测试,每个测试都能够生成.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
聚合则知道如何组合这些信息(对于某些信息而言,这并不像简单的求和那样简单)。Gcov包带有gcov-tool
可执行文件,可以合并gcda文件:
gcov-tool merge dir1 dir2
在dirN内,.gcda文件的位置必须相同。生成的.gcda文件将存储在merged_profile目录中(可以使用-o标志进行覆盖)。
Gcov-tool
主要用于与使用GCOV_PREFIX
或-fprofile-dir=XXX.%p
生成的一系列.gcda文件一起使用。
Gcov-tool一次只能合并两个配置文件,但您可以使用包装器gcov-tool-many来规避这个问题。
.gcda
分布在其中,它期望具有相同名称的文件位于该树中的相同位置? - thoni56gcov-tool merge dir1 dir -o dir ; gcov-tool merge dir2 dir -o dir; gcov-tool merge dir3 dir -o dir
,这样可以简化操作。(这并不是要贬低gcov-tool-many
的优点)。 - thoni56