gcov: 无法打开图形文件

18

我正在尝试使用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。


1
记录一下,我觉得编译器在这里默默失败是非常令人震惊的。Grr! - John Clements
5个回答

12

在 Lion 系统上,默认情况下,“gcc” 并不是真正的 gcc,而是 LLVM。它不支持生成测试覆盖率数据。

如果你运行命令 gcc-4.2 -fprofile-arcs -ftest-coverage a.c -o a ,这将使用真正的 gcc,并且很可能可以正常工作。


我的XCode安装中没有gcc-4.2的链接。然而,下面关于调用“clang”的提示解决了这个问题。谢谢! - John Clements

2
尝试使用clang而不是gcc。我遇到了相同的问题,使用clang解决了这个问题。

2

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

gcov -o a.c

这是不正确的。您需要在与gcda文件相同的目录中,通常与目标文件位于同一目录中。gcov可以从这些文件中找出源代码所在位置。 - dbn
在某些情况下,gcda文件未生成,并且从不同目录运行此命令会显示无法打开gcno文件。使用-o可以纠正此问题,并允许gcov显示正确的错误消息,即缺少gcda文件。 - Hazok

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

0

我在 Mac 10.8.4 上使用了以下方法:

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

enter image description here

  • 从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'
    

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