【问题标题】:Can GCOV create .gcda file in the different directory structure?GCOV 可以在不同的目录结构中创建 .gcda 文件吗?
【发布时间】:2018-12-27 02:51:12
【问题描述】:

我正在尝试使用主目录中的 lcov 生成代码覆盖率报告。使用 -coverage 选项编译源代码以在编译时生成覆盖信息(创建 gcno 文件)。 然后我将可执行文件和 gcno 文件复制到主目录。我正在尝试通过主目录中的 ./exe 检查是否可以生成覆盖率报告。我在 /home 中运行可执行文件并且它显示的测试用例通过但它发现没有创建.gcda文件。

I add the following CPP flag:
 -fprofile-dir= “/home” 
and hence run the executable but still .gcda is not created .

我需要在哪里指定路径,以便它从主目录获取 .gcno 文件并在当前目录中生成 .gcdo 文件??

【问题讨论】:

  • 我们可以选择指定不同的目录或在运行时使用当前目录吗?我已经设置了环境变量,但没有得到想要的输出。
  • 嗨himshikha,我是gcov 和lcov 的新手。尝试为使用 Android.mk 和 Android.bp 构建的 gtest 模块生成覆盖率报告。任何一种方式都不适合我。你能帮我解决这个拦截器吗?

标签: g++ code-coverage compiler-optimization gcov lcov


【解决方案1】:

也许,你正在编译多个模块,你检查过模块之间的依赖关系吗?请这样做:

  1. 编译所有代码,
  2. 然后删除无用的 .gcno 文件。 (gcno 在编译时生成)
  3. 执行您的测试(应创建与 gcno 文件匹配的 gcda)
  4. 生成报告

第二种可能性:

  1. 编译你的代码
  2. 执行测试
  3. 删除无用的 gcno + gcda 文件
  4. 生成报告

其他: 我想您可以使用一些选项为专用模块生成报告,但我对这些选项不是很熟悉。

问候

【讨论】:

  • 嗨,Thomas,您能否分享一些示例项目或模块或参考链接以在 AOSP 中逐步生成覆盖率?
【解决方案2】:

这可以使用 GCOV_PREFIX 和 GCOV_PREFIX_STRIP 来完成

请参阅文档: https://gcc.gnu.org/onlinedocs/gcc/Cross-profiling.html

问候 托马斯

【讨论】:

  • @Thomas 我已经设置了这些环境变量,但是它为所有其他模块重新生成了 .gcda 文件。我有一个特定模块的 .gcno 文件,同时为该特定模块执行测试用例,它创建了 .gcno 文件。来自其他模块的 gcda +.gcda 文件。
  • 您删除了之前的 gcda 文件吗?在重新开始测试之前?如果 gcda 文件已经存在,即使您的测试不会遍历所有 gcno 文件,您的 gcda 文件也不会被删除...
  • 是的,所有以前的 gcda 文件都被删除了
  • 这意味着您的测试会遍历所有模块,如果您想覆盖单个模块,最简单的方法是从其他模块中删除所有 gcno 文件。然后,您将获得一个模块的覆盖范围..
  • 好的。但是在 lcov 中显示文本的图像的目的是什么?
猜你喜欢
  • 2020-12-01
  • 2012-04-18
  • 2010-12-18
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 2012-09-25
  • 1970-01-01
相关资源
最近更新 更多