stringtranslate.com

Gcov

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]

Смотрите также

Ссылки

  1. ^ "How Gcov works-tool part of GCC" (PDF) . Архивировано из оригинала (PDF) 9 апреля 2014 г. . Получено 12 февраля 2012 г. . {{cite journal}}: Цитировать журнал требует |journal=( помощь )
  2. ^ abc Брайан Дж. Гоф. Введение в GCC — для компиляторов GNU gcc и g++ — тестирование покрытия с помощью gcov . Получено 12 февраля 2012 г.
  3. ^ "gcov man page" . Получено 12 февраля 2012 г. .
  4. ^ "gcov llvm" . Получено 12 ноября 2022 г. .
  5. ^ gnu.org. "Параметры командной строки Gcov" . Получено 11 февраля 2012 г.
  6. ^ linux commands. "Параметры командной строки Gcov". Архивировано из оригинала 2012-05-23 . Получено 12 февраля 2012 г.
  7. ^ "Львов".
  8. ^ "Gcovr".
  9. ^ "СКов".