2011-12-24 15 views
4

他の人がgenerate code coverage with XCode 4にアクセスできないと報告しましたが、私はXCode 4の中から実行できないだけでなく、できませんそれはコマンドラインからの簡単なおもちゃプログラムでさえも。 、Mac OS X LionとXCode 4/llvm-g ++ - 4.2のコードカバレッジはありません

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 

可哀想:

#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; 
} 

私は、コードカバレッジを生成するための試みで、次のコマンドを使用:私はこのcov.cファイルを作成するために、私を導いherehere与えられた例は、続きます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の-りんごdarwin11-LLVM-G ++ - 4.2(GCC)4.2.1 (されたApple Inc.のビルド5658に基づく)(LLVMは、2336.1.00を構築) "
  • また、gcc(llvm-gcc)を使ってみました。

答えて

3

私はthis answerからの助けを使用して、この質問に対する答えを見つけ出すことができました。基本的には、私のカバレッジコマンドをの代わりにclangに変更しました(サンプルファイルが純粋なCだったので、私はclang++の代わりにclangを使っていました)。そこから、私はlcovを使って、Java/coberturaから見たものに似た出力を生成することができました。

2

オンライオンg++は、あなたが発見したようにllvm-g++の別名です。 「本物」のgccを起動するには、gcc-4.2またはg++-4.2を使用します。

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

私のシステムにはg ++ - 4.2はありません。しかし、clang ++があり、そのトリックを行うようです。 –