我正在尝试使用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。
在 Lion 系统上,默认情况下,“gcc” 并不是真正的 gcc,而是 LLVM。它不支持生成测试覆盖率数据。
如果你运行命令 gcc-4.2 -fprofile-arcs -ftest-coverage a.c -o a
,这将使用真正的 gcc,并且很可能可以正常工作。
您确定在与源文件相同的目录中运行命令吗?除非您指定 -o 标志,否则必须在相同的目录中运行。请尝试:
gcov -o a.c
gcov
版本与编译应用程序所使用的GCC版本不匹配时。在某些系统上,软件包管理器在链接GCC和gcov
方面有一些奇怪的做法。例如,在许多系统上,gfortran
与gfortran-5
相同,但gcov
可能是旧的和陈旧的东西。我在 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'