【问题标题】:With gcov, is it possible to merge to .gcda files?使用 gcov,是否可以合并到 .gcda 文件?
【发布时间】:2011-03-11 02:53:38
【问题描述】:

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

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

我正在使用 lcov。

Mac OS X 10.6、GCC 4.0

谢谢!

【问题讨论】:

    标签: gcc code-coverage gcov lcov


    【解决方案1】:

    最后我设法通过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

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

    【讨论】:

    • 哇,感谢您的回复。从提出这个问题到现在,我有 2 份非常不同的工作。我希望这对某人有所帮助。
    • --coverage-fprofile-arcs -ftest-coverage(编译时)和-lgcov(链接时)的同义词,因此使用它们都是多余的。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 这就是我要找的。无需创建中间 .info 文件,只需整理所有 gcda。我为每个测试创建单独的 gcda,以便能够并行运行它们(例如,使用“make -j test”)。
      【解决方案4】:

      我认为这样做的预期方法不是直接组合 .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

      【讨论】:

        猜你喜欢
        • 2012-04-18
        • 2016-08-25
        • 2018-11-28
        • 2018-12-27
        • 2012-09-25
        • 2020-12-01
        • 1970-01-01
        • 2014-05-30
        相关资源
        最近更新 更多