我正在尝试使用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下。
答案 0 :(得分:12)
默认情况下,狮子会“gcc”不是gcc。这是LLVM。它不支持生成测试覆盖率数据。
如果您运行的是gcc-4.2 -fprofile-arcs -ftest-coverage a.c -o a
,那将使用真正的gcc,它可能会有效。
答案 1 :(得分:2)
您确定从与源文件相同的目录运行命令吗?除非指定-o标志,否则必须位于同一目录中。尝试:
gcov -o a.c
答案 2 :(得分:2)
尝试使用clang
代替gcc
。我有the same problem,并使用clang
为我修复了它。
答案 3 :(得分:1)
当您运行的gcov
版本与用于编译应用程序的GCC版本不匹配时,通常会发生这种情况。在某些系统上,包管理器在如何链接GCC和gcov
方面有奇怪的做法。例如,在许多系统上,gfortran
与gfortran-5
相同,但gcov
可能是旧的和有问题的。
答案 4 :(得分:0)
我在Mac 10.8.4
上使用了以下内容:
从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'