Я пытаюсь использовать lcov (v1.13, в OS X, с clang в качестве компилятора) для создания покрытия кода для моего набора тестов, и я столкнулся с одной раздражающей проблемой, которую не знаю, как решить. На SO есть несколько похожих вопросов, но я не смог найти решение для этого. По какой-то причине объявления функций/членов помечаются как достижимые, но не выполняются, как в приведенном ниже примере (это определение встроенного метода в заголовке):
Это делает метрики покрытия строк бесполезными, поэтому я надеялся, что есть способ исправить это, не помечая каждое объявление как LCOV_EXCL_LINE.
Используемые флаги компилятора довольно стандартны:
-g -O0 -fno-inline -ftest-coverage -fprofile-arcs -fno-elide-constructors
Странно то, что определения методов в исходных файлах также помечены красным, хотя тела — нет, например:
// header.h
class Foo {
void bar(); // ignored, marked as unreachable
}
// header.cpp
void Foo::bar() { // marked as red (reachable / not executed)
do_something(); // marked as covered
}
Если это имеет какое-либо значение, исходные файлы являются частью статической библиотеки, которая статически связана с тестовой системой в CMake.