2011-12-24 39 views
4

其他人報告沒有能夠generate code coverage with XCode 4,但我發現我不但無法從XCode 4內部完成,我無法做到它甚至可以在命令行中使用一個簡單的玩具程序。我跟着給herehere的例子,害得我創建這個文件cov.c:Mac OS X Lion和XCode 4/llvm-g ++沒有代碼覆蓋率 - 4.2

#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的-蘋果darwin11-LLVM-G ++ - 4.2(GCC)4.2.1 (基於蘋果公司建立5658)(LLVM建立2336.1.00 )「
  • 我也試過使用gcc(這是llvm-gcc)。

回答

3

我能回答弄清楚使用的幫助this answer這個問題。基本上,我改變我的覆蓋率命令使用clang而不是g++(因爲示例文件是純C,我用clang而不是clang++,我已經驗證了C++文件的工作情況)。從那裏,我能夠使用lcov生成類似於我以前從Java/cobertura中看到的輸出。

2

對於獅子g++llvm-g++的別名,因爲您已經發現。要調用「真正」的GCC,使用gcc-4.2g++-4.2

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

唉,我的系統上沒有g ++ - 4.2。然而,有鏗鏘++,這似乎是伎倆。 – 2011-12-24 20:56:47