Можно ли измерить покрытие функций с помощью gcov?
В настоящее время мы используем gcov с нашим набором тестирования для приложения Linux c++, и он хорошо справляется с измерением покрытия линии.
может ли gcov производить отчет о покрытии функции/метода в дополнение к покрытию линии?
глядя на параметры, которые принимает gcov, я не думаю, что это возможно, но мне может чего-то не хватать. Или, возможно, есть какой-либо другой инструмент, который может создавать отчет о покрытии функции / метода из статистики, генерируемой gcc?
обновление: по охвату функции / метода я имею в виду процент функций, которые выполняются во время тестов.
3 ответов
Я думаю, что вы имеете в виду опцию-f, которая даст вам процент строк, охватываемых каждой функцией. Есть интересная статья о gcov на доктор Добб что может быть полезным. Если" man gcov " не показывает флаг-f, проверьте, есть ли у вас разумно последняя версия пакета gcc.
Edit: чтобы получить процент неисполненных функций, вы можете просто проанализировать выход покрытия функции, так как покрытие 0.00% должно быть довольно никаких различий не называется. Этот небольшой скрипт печатает процент неисполненных функций:
#!/bin/bash
if test -z ""
then
echo "First argument must be function coverage file"
else
notExecuted=`cat | grep "^0.00%" | wc -l`
executed=`cat | grep -v "^0.00%" | wc -l`
percentage=$(echo "scale=2; $notExecuted / ($notExecuted + $executed) * 100" |bc)
echo $percentage
fi
мы начали использовать gcov и lcov вместе. Результаты lcov включают процент функций, которые выполняются для" модуля", на который вы смотрите.
EDIT: на модуль можно перейти от каталогов к файлам.
Я также хочу добавить, что если вы уже используете инструменты компилятора GNU, то gcov/lcov не будет слишком сложно для вас работать, и результаты, которые он дает, очень впечатляющий.
утилита lcov хороша, и мы используем ее. Но я не уверен, нужна ли она тебе для того, чего ты хочешь.
мы
использовать ctags (Википедия; sourceforge), чтобы найти все функции, объявленные в соответствующих заголовочных файлов.
запустите GCOV, чтобы получить покрытие линии для каждой функции в двоичном файле.
сравните список функций от 1 & 2 для того чтобы произвести " Вызванные функции" / "доступные функции."
мы называем это "покрытие API", так как мы применяем Шаг #1 только к открытым заголовкам API. Но вы можете сделать это во всех заголовках или только в подмножестве, как вы выбираете. Я думаю, что соотношение, которое мы производим таким образом, это соотношение, которое вы ищете.