无法在Mac OS X Lion和XCode 4 / llvm-g ++ -4.2上进行代码覆盖测试

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 (Based on Apple Inc. build 5658) (LLVM build 2336.1.00)"
  • 我还尝试使用了gcc(也就是llvm-gcc)。
2个回答

3

我通过这个答案的帮助,找到了解决这个问题的方法。基本上,我将我的覆盖命令更改为使用clang而不是g++(因为示例文件是纯C,所以我选择了clang而不是clang++,后者已经验证可与C++文件一起正常工作)。从那里开始,我就能够使用lcov生成类似于从Java/cobertura看到的输出。


2
在Lion系统中,g++llvm-g++的别名,正如您所发现的那样。要调用“真正的”gcc,请使用gcc-4.2g++-4.2
g++-4.2 -g -O0 --coverage -o $PWD/bin/cov $PWD/obj/*.o

唉,我的系统上没有g++-4.2。不过,有clang++,它似乎可以解决问题。 - Ben Hocking

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