产生空的.gcda文件

10

我使用gcov进行代码覆盖率分析,使用lcov生成覆盖率的图形输出。对于已经执行了部分目标文件的代码文件,这个方法效果很好。但我想要追踪完全未被执行的文件。我怀疑这与这些文件没有生成.gcda文件有关。是否有一种方法可以强制生成所有目标文件的.gcda文件,而不考虑是否执行?


我想做同样的事情。我正在处理一个代码库,其中单元测试被编译为每个命名空间的单独可执行文件。我可以使用覆盖率编译每个文件,并获得涉及测试的类的结果。但是有些文件没有为它们创建单元测试,因此被排除在外。它们甚至不会作为测试编译的一部分进行编译。我想要的是以某种方式为任何 .cpp 生成一个空的初始 .gcda 文件。 - Benedict
2个回答

8

执行此操作的程序如下所示:

http://linux.die.net/man/1/lcov

在捕获测试案例数据时建议使用以下步骤:

  1. 创建基准覆盖率数据文件

    lcov -c -i -d appdir -o app_base.info

  2. 执行测试

    appdir/test

  3. 创建测试覆盖率数据文件

    lcov -c -d appdir -o app_test.info

  4. 合并基准和测试覆盖率数据

    lcov -a app_base.info -a app_test.info -o app_total.info


非常感谢您提供的答案。 - netdigger
2
顺便提一下,基线覆盖率也可以在测试完成后生成。 - maxschlepzig

0

对于所有已正确编译和链接的文件,都会有一个 .gcda 文件。如果您发现缺少 *.gcda 文件,请检查是否存在 *.gcno 文件。如果没有,请检查是否使用以下命令正确构建了所有 Makefiles:

  • -ftest-coverage:当源文件使用此选项编译时,将生成 .gcno 笔记文件。
  • -fprofile-arcs:包含使用 GCC -fprofile-arcs 选项构建的对象文件的程序执行时,将生成 .gcda 计数数据文件。

更多信息请参见:https://gcc.gnu.org/onlinedocs/gcc/Gcov.html#Gcov


1
构建完成后会生成一个*.gcno文件,但只有在测试过程中才会生成一个*.gcda文件。如果一个源文件有*.gcno文件但没有*.gcda文件,gcov >= 4.7会忽略它。请参考https://github.com/gcovr/gcovr/issues/33。 - Victor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接