Gcc 使用gcov,是否可以合并到.gcda文件?

Gcc 使用gcov,是否可以合并到.gcda文件?,gcc,code-coverage,gcov,lcov,Gcc,Code Coverage,Gcov,Lcov,我将相同的源文件(C和Obj-C)编译成两个目标:单元测试可执行文件和实际产品(然后进行集成测试)。这两个目标构建到不同的位置,因此对象文件、.gcno和.gcda文件是分开的。并非所有源文件都编译到单元测试中,因此并非所有对象都存在于单元测试中。所有源文件都编译到产品版本中 有没有办法将这两组.gcda文件组合起来,以获得单元测试和集成测试的总覆盖率(因为它们在产品构建中运行) 我用的是lcov Mac OS X 10.6,GCC 4.0 谢谢 由于您正在使用lcov,您应该能够将gcov.g

我将相同的源文件(C和Obj-C)编译成两个目标:单元测试可执行文件和实际产品(然后进行集成测试)。这两个目标构建到不同的位置,因此对象文件、.gcno和.gcda文件是分开的。并非所有源文件都编译到单元测试中,因此并非所有对象都存在于单元测试中。所有源文件都编译到产品版本中

有没有办法将这两组.gcda文件组合起来,以获得单元测试和集成测试的总覆盖率(因为它们在产品构建中运行)

我用的是lcov

Mac OS X 10.6,GCC 4.0


谢谢

由于您正在使用lcov,您应该能够将gcov.gcda文件转换为lcov文件,并将它们与lcov合并
--添加跟踪文件

从手册页:添加tracefile的内容。 使用-a开关指定几个tracefile,通过为匹配的测试和文件名组合添加执行计数来组合这些文件中包含的覆盖率数据


最后,我设法通过lcov解决了我的问题

基本上我所做的是:

  • 使用标志
    -fprofile arcs-ftest coverage--coverage编译应用程序
  • 将应用程序副本分发到每个节点
  • 在每个节点中并行执行应用程序。(此步骤将覆盖率信息生成到访问主机中的应用程序目录中)
  • 让lcov完成他的工作:
    • lcov--directory src/--capture--output file coverage\u reports/app.info
  • 生成html输出:
    • genhtml-o覆盖率报告/coverage报告/app.info

我希望这能对某人有所帮助。

我通过lcov multi-d参数将其合并,如下所示。它起作用了

lcov -c -d ./tmp/ -d ./tmp1/ -o ./tmp/coverage.info

我认为这样做的目的不是直接组合
.gcda
文件,而是使用

lcov -o unittests.coverage -c -d unittests
lcov -o integrationtests.coverage -c -d integrationtests
然后,每个覆盖率数据代表一次“运行”。当然,您可以创建单独的图形或html视图。但您也可以使用
--add tracefile
,简称
-a
组合数据

lcov -o total.coverage -a unittests.coverage -a integrationtests.coverage

total.coverage
中,您可以使用
genhtml
生成总报告。

Wow,感谢您的回复。从问那个问题到现在,我有两份截然不同的工作。我希望这确实能帮助一些人。
--coverage
-fprofile arcs-ftest coverage
(编译时)和
-lgcov
(链接时)的同义词,因此使用它们是多余的。