Можно ли измерить покрытие функций с помощью 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 хороша, и мы используем ее. Но я не уверен, нужна ли она тебе для того, чего ты хочешь.

мы

  1. использовать ctags (Википедия; sourceforge), чтобы найти все функции, объявленные в соответствующих заголовочных файлов.

  2. запустите GCOV, чтобы получить покрытие линии для каждой функции в двоичном файле.

  3. сравните список функций от 1 & 2 для того чтобы произвести " Вызванные функции" / "доступные функции."

мы называем это "покрытие API", так как мы применяем Шаг #1 только к открытым заголовкам API. Но вы можете сделать это во всех заголовках или только в подмножестве, как вы выбираете. Я думаю, что соотношение, которое мы производим таким образом, это соотношение, которое вы ищете.