Я впервые работаю с инструментом покрытия gcov для анализа большого проекта.
У меня есть структура каталогов, как это:
HW
-FooHW1.cpp
-FooHW1.h
-FooHW2.cpp
-FooHW2.h
-...
-Makefile.am
Lib1
-FooLib1.cpp
-FooLib1.h
-FooLib2.cpp
-FooLib2.h
-...
-Makefile.am
Lib2
...
-Makefile.am
Lib3
...
-Makefile.am
Main
-main.cpp
-main.h
-Makefile.am
Каждый каталог имеет свой собственный Makefile, сгенерированный с помощью automake для генерации зависимостей и того, где используется компилятор c ++.
Поскольку моей целью является анализ покрытия операторов, я попытался использовать gcov, добавив следующие строки в каждый файл Makefile.am, чтобы сгенерировать мои файлы .gcno и .gcda, чтобы использовать gcov:
AM_CXXFLAGS = -fprofile-arcs -ftest-coverage
AM_LDFLAGS = -fprofile-arcs
К сожалению, даже если он компилируется, он не создает (или не связывает) несколько * .o, а при вызове gcov обычно выдает ошибку:
undefined __gcov_init
Я также пытался расслабиться, согласно http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#index-coverage-536, верхние инструкции к:
AM_CXXFLAGS = --coverage
AM_LDFLAGS = --coverage
но это не помогает мне.
Я хотел бы указать, что это первый опыт использования инструмента gcov и работы с большими проектами на c ++.
Спасибо за вашу помощь.
http://bobah.net/d4d/tools/code-coverage-with-gcov а также
http://www.slideshare.net/maguschen/using-gcov-and-lcov хорошие источники для использования gcov / lcov (с этой помощью мне удалось использовать lcov в действительно большом и сложном проекте)
lcov дает вам возможность показывать результаты покрытия в формате html (хороший процент для перечисленных файлов или даже для строк в исходных файлах).
О, и я надеюсь, что вы понимаете, что это динамическое покрытие, так что вам нужно запустить программу, чтобы получить любое освещение (здание должно только создавать .gcno
файлы).
связать библиотеку gocv
-lgcov
это должно помочь