Как лучше всего найти неустановленные шаблоны в коде C ++?
У меня есть база кода, в которой широко используются шаблоны.
Конечно, мы хотим убедиться в высоком тестовом покрытии.
Для всего используемого кода это очень хорошо работает с gcov
.
Однако gcov
сообщает о неиспользуемых шаблонах как неисполняемых.
После некоторого поиска в Google выяснилось, что нет способа заставить g ++
выдавать код для этих шаблонов (что логично, как компилятор должен угадывать какие-либо типы?)
Также похоже, что нет способа заставить gcov распознавать неустановленный код шаблона как исполняемый код.
Есть ли что-нибудь «из коробки», что позволяет мне расширять файлы, созданные GCC -ftest-охват -fprofile-arcs
инструментарий? Согласно документации по параметрам gcov GCC , вероятно, будет достаточно пометить все тело функции шаблона как один блок, так как выполнение никогда не завершится на нем.
EDIT (справочная информация): I Я работаю над библиотекой шаблонов только для заголовков. Моя цель здесь - найти неиспользуемые / непроверенные функции.
Я знаю, что покрытие кода некорректно, но поиск неинтересированного кода является очень важным шагом на пути к более качественному тестированию кода.
В настоящее время мы помещаем макросы контрольных точек в начало каждой функции.
В режиме тестирования они расширяются до кода, который вставляет пару (файл, строка)
в глобальный набор пройденных контрольных точек.
После запуска тестов мы вручную читаем все файлы и сравниваем достигнутые контрольные точки с набором всех доступных контрольных точек.
Поиск неустановленного кода важен, например, из-за неинтуитивного поведения приоритета шаблона C ++ где-то может быть мертвый код, который читатель или даже автор ожидают, что они будут использованы.