我正在尝试使用 gcov。我有这个简单的文件 ac:
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 下。
默认情况下,在 Lion 上,“gcc”不是 gcc。这是LLVM。而且它不支持生成测试覆盖率数据。
如果你gcc-4.2 -fprofile-arcs -ftest-coverage a.c -o a
改为运行,它将使用真正的 gcc,它可能会工作。
尝试使用clang
而不是gcc
. 我有同样的问题,并使用clang
为我修复它。
您确定从与源文件相同的目录运行命令吗?您必须在同一目录中,除非您指定 -o 标志。尝试:
gcov -o a.c
gcov
当您运行的版本与用于编译应用程序的 GCC 版本不匹配时,通常会发生这种情况。在某些系统上,包管理器在链接 GCC 和gcov
. 例如,在许多系统gfortran
上是相同的,gfortran-5
但gcov
可能是旧的和硬壳的。
我在上使用了以下内容Mac 10.8.4
:
从 gcc 网站编写了这个示例代码:
#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'