Ранее уже задавалось много похожих вопросов:
чтобы назвать только несколько. Однако ни один из них не помог мне решить мою собственную проблему.
Я компилирую свой исходный код с gcc версия 4.8.4 (Ubuntu 4.8.4-2ubuntu1 ~ 14.04.3)
g++ -c -pipe -Wno-psabi -std=gnu++11 -Wextra -pedantic -fprofile-arcs -ftest-coverage --coverage -fno-inline -fno-inline-small-functions -fno-default-inline -O0 -fno-elide-constructors -g -Wall -W -o .obj/myclass.o unittest_myclass.cpp
Тогда я бегу gcov (Ubuntu 4.8.4-2ubuntu1 ~ 14.04.3) 4.8.4 на одном из моих исходных файлов с
gcov unittest_myclass.cpp -o .obj/
Этот файл содержит модульные тесты для класса только заголовка. gcov успешно генерирует информацию о покрытии для этого заголовочного файла:
File '../include/myclass.h'
Lines executed:11.05% of 173
Creating 'myclass.h.gcov'
Тем не менее, результаты в myclass.h.gcov не правы. Для большинства строк gcov сообщает, что они не содержат исполняемый код. Для тех, кого он определяет как исполняемый файл, он в основном сообщает, что они не были выполнены. Но я уверен, что они выполняются (я проверял это во время отладки, некоторые модульные тесты не выполнялись из-за ошибок и т. Д.). Шаблоны не участвуют.
Поэтому я предполагаю, что по какой-то причине gcov не может определить правильное выполнение. Как видно из приведенных выше аргументов командной строки: оптимизация отключена, встраивание отключено …
Есть идеи, что еще может вызвать эти проблемы?
Кажется, проблема была не в том, что мой класс только заголовок, а в том, что я вызвал gcov
gcov unittest_myclass.cpp -o .obj/
если я вместо этого запустить его с
gcov *.cpp -o .obj/
это сообщает
File '../include/myclass.h'
Lines executed:95.56% of 248
Creating 'myclass.h.gcov'
и в результате myclass.h.gcov
файл выглядит намного больше, чем я ожидал.
Других решений пока нет …