【问题标题】:Generating empty .gcda files生成空的 .gcda 文件
【发布时间】:2014-07-18 08:25:12
【问题描述】:

我使用 gcov 进行代码覆盖率分析,使用 lcov 生成覆盖率的图形输出。这适用于至少执行了目标文件的某些部分的代码文件。我希望能够跟踪根本没有执行的文件。我怀疑这与没有为这些文件生成 .gcda 文件有关。有没有办法强制为所有目标文件生成 .gcda 文件而不考虑执行?

【问题讨论】:

  • 我也想这样做。我正在处理一个代码库,其中单元测试被编译为每个命名空间的单独可执行文件。我可以编译每个覆盖率,并获得测试中涉及的类的结果。但是有些文件没有为它们创建单元测试,所以被排除在外。它们甚至没有被编译为测试编译的一部分。我想要的是以某种方式为任何 .cpp 生成一个空的初始 .gcda。

标签: gcov lcov


【解决方案1】:

此处概述了执行此操作的过程:

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

【讨论】:

  • 非常感谢您的回答。
  • 顺便说一句,基线覆盖率也可以在测试执行后生成。
【解决方案2】:

对于所有正确编译和链接的文件,都会有一个 .gcda 文件。如果您看到缺少 *.gcda 文件,请检查 *.gcno 文件是否存在。如果它不检查是否所有的 Makefile 都正确构建:

  • -ftest-coverage : 编译源文件时生成.gcno notes文件
  • -fprofile-arcs : 执行包含使用 GCC -fprofile-arcs 选项构建的目标文件的程序时会生成 .gcda 计数数据文件。

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

【讨论】:

  • 构建后会生成一个*.gcno,但是只有在测试时才会生成一个*.gcda文件。如果源文件有 *.gcno 文件但没有 *.gcda 文件,则 gcov >= 4.7 会忽略它。见github.com/gcovr/gcovr/issues/33
猜你喜欢
  • 2012-04-18
  • 2016-08-25
  • 2020-12-01
  • 2016-08-18
  • 2021-06-28
  • 2011-06-06
  • 1970-01-01
  • 2013-10-08
相关资源
最近更新 更多