Можно ли измерить покрытие функции с помощью gcov?

StackOverflow https://stackoverflow.com/questions/534201

Вопрос

В настоящее время мы используем gcov с нашим пакетом тестирования для приложения Linux C ++, и он хорошо справляется с измерением покрытия линии.

Может ли gcov создать отчет о покрытии функции / метода в дополнение к покрытию линии?

Глядя на параметры, которые принимает gcov, я не думаю, что это возможно, но, возможно, я что-то упускаю.Или, возможно, есть ли какой-либо другой инструмент, который может создать отчет о покрытии функций / методов на основе статистики, сгенерированной gcc?

Обновить: Под охватом функций / методов я подразумеваю процент функций, которые выполняются во время тестов.

Это было полезно?

Решение

Я предполагаю, что вы имеете в виду опцию -f, которая даст вам процентное количество строк, покрытых для каждой функции.Интересная статья о gcov есть на ДокторДоббс что могло бы быть полезно.Если "man gcov" не показывает флаг -f, проверьте, установлена ли у вас достаточно свежая версия пакета gcc.

Редактировать: чтобы получить процент неисполненных функций, вы можете просто проанализировать выходные данные покрытия функции, так как покрытие 0,00% должно быть в значительной степени эквивалентно тому, что не вызывается.Этот небольшой скрипт выводит процент неисполненных функций:

#!/bin/bash

if test -z "$1"
then
    echo "First argument must be function coverage file"
else
    notExecuted=`cat $1 | grep "^0.00%" | wc -l`
    executed=`cat $1 | grep -v "^0.00%" | wc -l`

    percentage=$(echo "scale=2; $notExecuted / ($notExecuted + $executed) * 100" |bc)

    echo $percentage
fi

Другие советы

Мы начали использовать gcov и lcov ( лков ) вместе.Результаты lcov действительно включают процент функций, которые выполняются для "модуля", на который вы смотрите.

Редактировать: В модуль может переходить от каталогов к файлам.

Я также хочу добавить, что если вы уже используете инструменты компиляции GNU, то запустить gcov / lcov для вас не составит большого труда, и результаты, которые он дает, очень впечатляют.

Утилита lcov хороша, и мы ею пользуемся.Но я не уверен, нужно ли вам это для того, чего вы хотите.

Мы

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

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

  3. Сравните список функций из 1 и 2, чтобы получить "Вызываемые функции" / "Доступные функции".

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top