Почему gcov сообщает о 0% -ном покрытии заголовочного файла для хорошо используемого класса? - PullRequest
3 голосов
/ 24 апреля 2009

Я впервые пытаюсь измерить тестовое покрытие, используя gcov . Теперь, когда я прошел начальную кривую обучения, кажется, что дела идут хорошо, за исключением одного небольшого затруднения. Я ожидаю, что это сводится к отсутствию понимания с моей стороны, поэтому я надеюсь, что кто-то, знакомый с gcov, сможет объяснить, что происходит.

Проблема в том, что у меня есть один конкретный заголовочный файл, показывающий 0% покрытия. Однако only в этом заголовке является объявлением класса для хорошо используемого класса.

Кроме того, файл реализации для класса показывает 100% охват, и я могу указать на 5 различных тестов, в которых я точно знаю, что класс успешно создается.

Так почему бы gcov сообщить о 0% охвате класса, и как я могу это исправить?

- редактировать -

Как указал Лакки ниже, если заголовок не имеет исполняемого кода, его не следует включать в расчеты покрытия. И на самом деле, из всех моих классов этот конкретный заголовочный файл является единственным, для которого gcov пытается сгенерировать информацию о покрытии.

Я провел построчное сравнение с другими заголовками, и самое большое различие, которое я обнаружил, заключалось в том, что этот конкретный заголовок не имеет явного конструктора или деструктора, в отличие от других. В попытке минимизировать различия между файлами, я добавил явный ctor и dtor к классу задачи. Однако это не имело никакого значения.

Ответы [ 3 ]

4 голосов
/ 26 апреля 2009

Похоже, я разобрался с проблемой. Как я и ожидал, это скорее проблема отсутствия опыта, чем что-либо еще.

Как оказалось, gcov находил только подмножество доступных трассировочных файлов и, следовательно, сообщал только часть общих результатов. Поиск и добавление остальных файлов трассировки помогло решить проблему.

Для любого любопытного, проблемный заголовочный файл по-прежнему отображается в выходных данных. На самом деле, все остальные заголовочные файлы тоже, даже если они не содержат исполняемого кода. Тем не менее, все они показывают 90 +% покрытия.

3 голосов
/ 24 февраля 2012

C ++ создает неявный деструктор, даже если вы не создали его явно. Если вы не уничтожите свой объект до завершения программы, этот неявный деструктор никогда не будет вызван. gcov показывает это, отмечая счетчик '0' в строке объявления класса.

2 голосов
/ 24 апреля 2009

Ваш заголовочный файл не содержит исполняемый код. Поскольку ничего не выполняется (в объявлении класса нет исполняемого кода), здесь нечего измерять и нечего покрывать.

...