【问题标题】:gcov: cannot open graph filegcov:无法打开图形文件
【发布时间】:2011-10-12 14:38:07
【问题描述】:

我正在尝试使用 gcov。我有这个简单的文件 a.c:

int main() {
   return 0;
}

所以我愿意

gcc -fprofile-arcs -ftest-coverage a.c -o a
./a
gcov a.c

我明白了

a.gcno:cannot open graph file

我做错了吗?我在 Mac OS X Lion 下。

【问题讨论】:

  • 作为记录,我发现编译器在这里默默地失败是非常令人震惊的。呸!

标签: c macos gcov


【解决方案1】:

当您运行的 gcov 版本与用于编译应用程序的 GCC 版本不匹配时,通常会发生这种情况。在某些系统上,包管理器在链接 GCC 和 gcov 方面有一些奇怪的做法。例如,在许多系统上,gfortrangfortran-5 相同,但 gcov 可能是陈旧而顽固的东西。

【讨论】:

    【解决方案2】:

    我在Mac 10.8.4上使用了以下内容:

    • 通过 xcode 安装命令行工具:

    • 从 gcc 网站上写了this example 代码:

      #include <stdio.h>  
      main() 
      {  
         int i, total; total = 0; 
         for (i = 0; i < 10; i++) 
            total += i; 
         if (total != 45) 
            printf ("Failure\n"); 
         else 
            printf ("Success\n"); 
      }
      
    • 使用真正的GCC编译gcc-mp-4.7 -fprofile-arcs -ftest-coverage tmp.c

    • 使用 GCC 的 gcov:gcov-mp-4.7 -b tmp.c 会给你这个输出:

      File 'tmp.c'
      Lines executed:87.50% of 8
      Branches executed:100.00% of 4
      Taken at least once:75.00% of 4
      Calls executed:50.00% of 2
      Creating 'tmp.c.gcov'
      

    【讨论】:

      【解决方案3】:

      默认情况下,“gcc”不是 gcc。这是LLVM。而且它不支持生成测试覆盖率数据。

      如果你运行gcc-4.2 -fprofile-arcs -ftest-coverage a.c -o a,那将使用真正的 gcc,它可能会工作。

      【讨论】:

      • 我的 XCode 安装没有 gcc-4.2 的链接。然而,下面关于调用“clang”的提示解决了这个问题。谢谢!
      【解决方案4】:

      尝试使用clang 而不是gcc。我有the same problem,并使用clang 为我修复了它。

      【讨论】:

        【解决方案5】:

        您确定从与源文件相同的目录运行命令吗?您必须在同一目录中,除非您指定 -o 标志。试试:

        gcov -o a.c
        

        【讨论】:

        • 这不是真的。您需要与 gcda 文件 位于同一目录中,该目录通常与目标文件位于同一目录中。 gcov 可以从这些文件中找出来源。
        • 在某些情况下gcda文件没有生成,从不同的目录运行这个命令显示gcno文件无法打开。使用 -o 可以纠正问题并允许 gcov 然后显示 gcda 文件丢失的正确错误消息。
        猜你喜欢
        • 1970-01-01
        • 2013-10-25
        • 2013-06-21
        • 2018-04-22
        • 2019-01-06
        • 1970-01-01
        • 2020-05-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多