Mac OS X Lion和XCode 4 / llvm-g ++ - 4.2没有代码覆盖率

时间:2011-12-24 02:28:28

标签: macos gcov llvm-gcc

其他人报告说无法generate code coverage with XCode 4,但我发现我不能在XCode 4中做到这一点,即使使用命令行中的简单玩具程序也无法做到。我按照herehere给出的示例,这导致我创建了这个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 箱/ 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)。

2 个答案:

答案 0 :(得分:3)

我能够使用this answer的帮助找出这个问题的答案。基本上,我更改了我的coverage命令以使用clang而不是g++(因为示例文件是纯C,我使用的是clang而不是clang++,我是验证与C ++文件一起正常工作)。从那里,我能够使用lcov生成类似于我以前从Java / cobertura看到的输出。

答案 1 :(得分:2)

狮子会g++llvm-g++的别名,正如您所发现的那样。调用&#34;真实&#34; gcc,使用gcc-4.2g++-4.2

g++-4.2 -g -O0 --coverage -o $PWD/bin/cov $PWD/obj/*.o