Gcov — это инструмент анализа покрытия исходного кода и профилирования по операторам . Gcov генерирует точные подсчеты количества выполнений каждого оператора в программе и аннотирует исходный код для добавления инструментария. Gcov поставляется как стандартная утилита с набором GNU Compiler Collection (GCC). [1]
Утилита gcov предоставляет информацию о том, как часто программа выполняет сегменты кода. [2] Она создает копию исходного файла, аннотированную с помощью частот выполнения. Утилита gcov не создает никаких временных данных и работает только с кодом, скомпилированным с помощью пакета GCC. В руководстве утверждается, что она несовместима с любым другим механизмом профилирования или покрытия тестами, [3] но она также работает с файлами, сгенерированными llvm . [4]
gcov производит анализ тестового покрытия специально инструментированной программы . Параметры -fprofile-arcs -ftest-coverage
должны использоваться для компиляции программы для анализа покрытия (первый параметр для записи статистики ветвления, а второй для сохранения количества выполненных строк); -fprofile-arcs
также должны использоваться для связывания программы. [2] После запуска такая программа создаст несколько файлов с расширениями (суффиксами) ".bb", ".bbg" и ".da", которые может анализировать gcov. Он принимает исходные файлы в качестве аргументов командной строки и создает аннотированный исходный листинг. Каждая строка исходного кода имеет префикс с указанием количества выполнений; строки, которые не были выполнены, имеют префикс "#####". [2]
gcov создает файл журнала с именем sourcefile.gcov , который указывает, сколько раз была выполнена каждая строка исходного файла sourcefile.c . Этот аннотированный исходный файл можно использовать с gprof , другим инструментом профилирования, для извлечения информации о времени выполнения программы.
Следующая программа, написанная на языке C , перебирает целые числа от 1 до 9 и проверяет их делимость с помощью оператора модуля (%).
#include <stdio.h> int main ( void ) { int i ; for ( i = 1 ; i < 10 ; i ++ ) { if ( i % 3 == 0 ) printf ( "%d делится на 3 \n " , i ); if ( i % 11 == 0 ) printf ( "%d делится на 11 \n " , i ); } вернуть 0 ; }
Для включения тестирования покрытия программа должна быть скомпилирована со следующими параметрами:
$ gcc -Wall -fprofile-arcs -ftest-coverage cov.c
где cov.c — имя файла программы. Это создает инструментированный исполняемый файл , который содержит дополнительные инструкции, которые записывают количество выполнений каждой строки программы. Опция -ftest-coverage добавляет инструкции для подсчета количества выполнений отдельных строк, в то время как -fprofile-arcs включает код инструментирования для каждой ветви программы. Инструментирование ветвей записывает, как часто различные пути проходят через операторы 'if' и другие условные операторы.
Затем исполняемый файл можно запустить для анализа кода и создания данных о покрытии.
$ ./г.выход
Данные прогона записываются в несколько файлов данных покрытия с расширениями «.bb», «.bbg» и «.da» соответственно в текущем каталоге .
Если выполнение программы меняется в зависимости от входных параметров или данных, ее можно запустить несколько раз, а результаты будут накапливаться в файлах данных покрытия для общего анализа.
Эти данные можно проанализировать с помощью команды gcov и имени исходного файла:
$ gcov cov.c 88,89% из 9 исходных строк выполнены в файле cov.c Создание cov.c.gcov
Команда gcov создает аннотированную версию исходного файла с расширением «.gcov», содержащую количество выполнений каждой строки:
#include <stdio.h> int main ( void ) { 1 int i ; 10 for ( i = 1 ; i < 10 ; i ++ ) { 9 if ( i % 3 == 0 ) 3 printf ( "%d делится на 3 \n " , i ); 9 if ( i % 11 == 0 ) ###### printf ("%d делится на 11\n", i); 9 } 1 возврат 0 ; 1 }
Количество строк можно увидеть в первом столбце вывода. Строки, которые не были выполнены, отмечены решетками '######'.
Утилита командной строки Gcov поддерживает следующие параметры при создании аннотированных файлов из данных профиля: [5] [6]
Lcov — это графический интерфейс для gcov. Он собирает данные gcov для нескольких исходных файлов и создает HTML- страницы, содержащие исходный код, аннотированный информацией о покрытии. Он также добавляет обзорные страницы для легкой навигации по структуре файла. Lcov поддерживает измерение покрытия операторов, функций и ветвей. [7] Также есть версия для Windows.
Gcovr предоставляет утилиту для управления использованием gcov и генерации суммарных результатов покрытия кода. Эта команда вдохновлена пакетом Python coverage.py, который предоставляет похожую утилиту в Python. Gcovr создает либо компактные, читаемые человеком сводные отчеты, либо машиночитаемые XML-отчеты, либо графическое HTML-сводное резюме. XML-отчеты, созданные gcovr, могут использоваться Jenkins для предоставления графических сводок покрытия кода. Gcovr поддерживает измерение покрытия операторов и ветвей [8]
SCov — это утилита, которая обрабатывает промежуточный текстовый формат, сгенерированный gcov (используя gcov -i), для создания отчетов о покрытии кода. Эти отчеты могут быть простым текстовым отчетом или HTML- страницами с более подробными отчетами. [9]
{{cite journal}}
: Цитировать журнал требует |journal=
( помощь )