【问题标题】:Unable to generate *.c.gcov file无法生成 *.c.gcov 文件
【发布时间】:2011-12-26 06:49:09
【问题描述】:

我有以下结构:

Source_code/build/unix/Makefile
Source_code/code/Lib/src/lib1/a.c

gcc 编译选项中提到了-fprofile-arcs-ftest-coverage 选项。它成功生成了a.gcdaa.gcno 文件。当给出以下选项gcov a.c 时,它会正确地为执行的行提供统计信息。

但无法正常生成a.c.gcov文件,它只包含/* EOF */

它会抛出以下消息:

../../code/lib/src/lib1/a.c:creating 'a.c.gcov'
../../code/lib/src/lib1/a.c:cannot open source file

请让我知道生成a.c.gcov 文件。

【问题讨论】:

  • 我也尝试过使用:gcov -o ../../code/lib/src/lib1/a*:来自 source_code/build/unix:它没有显示无法开源文件,但 gcov 文件只有 /* EOF */
  • 您确定在链接步骤(编译的最后一步或每个子项目)中使用了 -fprofile-arcs 和 -ftest-coverage 选项吗?你的操作系统是什么? a.*gc* 文件有多大?
  • 您使用的是 Mac 吗?如果是这样,您从 gcc 中获得了哪些版本信息?

标签: gcc gcov


【解决方案1】:

从编译代码的文件夹中运行 gcov 对我有用。

在 .gcov 文件的顶部,它说明了完整的文件路径。例如:

         -:    0:Source:tmp.c
         -:    0:Graph:tmp.gcno
         -:    0:Data:tmp.gcda
         -:    0:Runs:1
         -:    0:Programs:1
         -:    1:#include <stdio.h>
         -:    2:
         -:    3:int main (void)

如果它位于不同的文件夹中,即 /path/tmp.c,请执行以下操作:

gcov ./path/tmp.c -o ./path/tmp

https://gcc.gnu.org/ml/gcc-help/2010-04/msg00080.html

【讨论】:

    【解决方案2】:

    在找不到源文件的情况下,建议在编译时使用绝对路径。而不是使用“../”。

    其次,您可以尝试复制 gcno 和 gcda 文件以匹配“../../code/lib/src/lib1/a.c”。

    或者修复构建规则以确保没有应用损坏的相对路径(如 ../../)

    【讨论】:

      猜你喜欢
      • 2015-10-18
      • 2016-04-01
      • 1970-01-01
      • 2015-12-29
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多