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

StackOverflow https://stackoverflow.com/questions/784379

Вопрос

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

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

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

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

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top