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

时间:2011-06-28 22:01:49

标签: code-coverage gcov

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

先前已经问过

With gcov, is it possible to merge to .gcda files?,解决方案是转换为lcov .info文件并以这种方式合并。如果可能的话,我希望合并操作的输出仍然是单个.gcda文件,这样我就不会被迫使用lcov。

2 个答案:

答案 0 :(得分:4)

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

我过去所做的只是将所有数据提取到带注释的源(.gcov)并在该级别进行聚合。 .gcda格式能够存储比线覆盖范围信息(例如分支计数)更多的内容,而libgcov.a聚合知道如何组合它们(对于某些它来说,它并不像求和那么简单)。

答案 1 :(得分:1)

我刚刚创建了一个测试项目,显示AFAIKT,当一个测试应用程序连续运行不同的参数时,gcda文件在运行之间更新并运行gcov一次(我使用gcovr.py)生成总覆盖率信息。