他の人がXCode 4 でコード カバレッジを生成できないと報告していますが、XCode 4 内からできないだけでなく、コマンド ラインからの簡単なおもちゃのプログラムでもできないことがわかりました。hereとhereの例に従って、この 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. ビルド 5658 に基づく) (LLVM ビルド 2336.1.00)」- また、gcc (llvm-gcc) を使用してみました。