其他人报告说无法使用 XCode 4 生成代码覆盖率,但我发现我不仅不能在 XCode 4 中执行此操作,甚至使用命令行中的简单玩具程序也无法执行此操作。我按照此处和此处给出的示例进行操作,这导致我创建了这个 cov.c 文件:
#include <stdio.h>
int main (void) {
int i;
for (i = 1; i < 10; i++) {
if (i % 3 == 0)
printf("%d is divisible by 3\n", i);
if (i % 11 == 0)
printf("%d is divisible by 11\n", i);
}
return 0;
}
然后我使用以下命令来尝试生成代码覆盖率:
g++ -c -g -O0 --coverage -o $PWD/obj/cov.o $PWD/cov.c
g++ -g -O0 --coverage -o $PWD/bin/cov $PWD/obj/*.o
$PWD/bin/cov
唉,在 obj 目录中不存在 cov.gcno 文件。事实上,我在这之后唯一的文件是:cov.c obj/cov.o bin/cov
此外,如果我输入nm bin/cov
,我会得到以下信息:
0000000100001048 S _NXArgc
0000000100001050 S _NXArgv
0000000100001060 S ___progname
0000000100000000 A __mh_execute_header
0000000100001058 S _environ
U _exit
0000000100000e40 T _main
U _printf
0000000100001000 s _pvars
U dyld_stub_binder
0000000100000e00 T start
这表明从未链接过 libgcov.a。如果我替换
g++ -g -O0 --coverage -o $PWD/bin/cov $PWD/obj/*.o
和:
g++ -g -O0 --coverage -o $PWD/bin/cov -lgcov $PWD/obj/*.o
我得到完全相同的结果。
更多信息:
g++ --version
产生:“i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1(基于 Apple Inc. build 5658)(LLVM build 2336.1.00)”- 我也尝试过使用 gcc(即 llvm-gcc)。