4

他の人が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 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) を使用してみました。
4

2 に答える 2

3

この回答の助けを借りて、この質問に対する回答を見つけることができました。基本的に、カバレッジコマンドをclang代わりに使用するように変更しましg++た(サンプルファイルは純粋なCであったため、clang代わりに使用しclang++ました。これは、C ++ファイルで正常に機能することを確認しました)。そこから、lcovを使用して、Java/coberturaから見たものと同様の出力を生成することができました。

于 2011-12-24T21:03:30.377 に答える
2

あなたが発見したように、On Liong++は のエイリアスです。llvm-g++「本物の」gcc を呼び出すには、gcc-4.2またはを使用しg++-4.2ます。

g++-4.2 -g -O0 --coverage -o $PWD/bin/cov $PWD/obj/*.o
于 2011-12-24T02:53:56.567 に答える