Нет покрытия кода с Mac OS X Lion и XCode 4 / llvm-g ++ - 4.2 - PullRequest
4 голосов
/ 24 декабря 2011

Другие люди сообщали, что не могут генерировать покрытие кода с помощью XCode 4 , но я не только не могу этого сделать из XCode 4, я не могу сделать это даже с простой игрушкойпрограмма из командной строки.Я следовал приведенным примерам здесь и здесь , что привело меня к созданию файла 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).

Ответы [ 2 ]

3 голосов
/ 25 декабря 2011

Мне удалось найти ответ на этот вопрос с помощью справки от этого ответа .По сути, я изменил свои команды покрытия, чтобы использовать clang вместо g++ (поскольку файл примера был чистым C, я использовал clang вместо clang++, что, как я убедился, прекрасно работает с файлами C ++),Оттуда я смог использовать lcov для генерации вывода, похожего на то, что я привык видеть в Java / cobertura.

2 голосов
/ 24 декабря 2011

On Lion g++ - это псевдоним для llvm-g++, как вы обнаружили. Чтобы вызвать «настоящий» gcc, используйте gcc-4.2 или g++-4.2:

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