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

时间:2010-07-02 13:43:10

标签: gcc code-coverage gcov lcov

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

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

我正在使用lcov。

Mac OS X 10.6,GCC 4.0

谢谢!

4 个答案:

答案 0 :(得分:9)

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

基本上我做的是以下内容:

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

我希望这对某人有帮助。

答案 1 :(得分:6)

由于你正在使用lcov,你应该能够将gcov .gcda文件转换为lcov文件并将它们与lcov --add-tracefile合并。

  

从联机帮助页:添加tracefile的内容。   使用-a开关指定多个跟踪文件,通过添加匹配测试和文件名组合的执行计数来组合这些文件中包含的coverage数据。

答案 2 :(得分:1)

我认为实现此目的的预期方法不是直接合并.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生成总报告。

答案 3 :(得分:0)

我通过lcov multi -d参数合并它,如下所示。它有效。

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