Gcov

Инструмент покрытия программного обеспечения
gcov
Операционная системаUnix-подобный
ТипПокрытие кода
ЛицензияGNU General Public License и другие лицензии свободного программного обеспечения [ какие? ]
Веб-сайтgcc.gnu.org/onlinedocs/gcc/Gcov.html

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]

  • -h ( --help ): вывести справку об использовании gcov (на стандартный вывод) и выйти без выполнения дальнейшей обработки.
  • -v ( --version ): отобразить номер версии gcov (на стандартном выводе) и выйти без выполнения дальнейшей обработки.
  • -a ( --all-blocks ): Записать отдельные счетчики выполнения для каждого базового блока. Обычно gcov выводит счетчики выполнения только для основных блоков строки. С помощью этой опции вы можете определить, выполняются ли блоки в пределах одной строки.
  • -b ( --branch-probabilities ): Записывать частоты ветвлений в выходной файл и записывать сводную информацию о ветвлениях в стандартный вывод. Эта опция позволяет вам видеть, как часто использовалась каждая ветвь в вашей программе. Безусловные ветвления не будут показаны, если не указана опция -u.
  • -c ( --branch-counts ): Записывать частоты ветвлений как количество принятых ветвлений, а не как процент принятых ветвлений.
  • -n ( --no-output ): Не создавать выходной файл gcov.
  • -l ( --long-file-names ): Создавать длинные имена файлов для включаемых исходных файлов. Например, если заголовочный файл xh содержит код и был включен в файл ac, то запуск gcov для файла ac создаст выходной файл с именем ac##xhgcov вместо xhgcov. Это может быть полезно, если xh включен в несколько исходных файлов и вы хотите увидеть отдельные вклады. Если вы используете опцию `-p', то имена как включаемых, так и включаемых файлов будут полными именами путей.
  • -p ( --preserve-paths ): Сохранять полную информацию о пути в именах сгенерированных файлов .gcov. Без этой опции используется только компонент имени файла. С этой опцией используются все каталоги, при этом символы `/' преобразуются в символы `#', . компоненты каталога удаляются, а неудаляемые .. компоненты переименовываются в `^'. Это полезно, если исходные файлы находятся в нескольких разных каталогах.
  • -r ( --relative-only ): Выводить только информацию об исходных файлах с относительным путем (после удаления префикса источника). Абсолютные пути обычно являются системными заголовочными файлами, и охват любых встроенных функций в них обычно неинтересен.
  • -f ( --function-summaries ): выводить сводки для каждой функции в дополнение к сводке на уровне файла.
  • -o directory|file ( --object-directory directory или --object-file file ): Укажите либо каталог, содержащий файлы данных gcov, либо имя пути объекта. Файлы данных .gcno и .gcda ищутся с помощью этой опции. Если указан каталог, файлы данных находятся в этом каталоге и называются по имени входного файла без расширения. Если здесь указан файл, файлы данных называются по имени этого файла без расширения.
  • -s directory ( --source-prefix directory ): префикс для имен исходных файлов, который нужно удалить при генерации выходных файлов покрытия. Этот параметр полезен при сборке в отдельном каталоге, а путь к исходному каталогу не нужен при определении имен выходных файлов. Обратите внимание, что это определение префикса применяется до определения того, является ли исходный файл абсолютным.
  • -u ( --unconditional-branches ): Когда даны вероятности ветвлений, включите вероятности безусловных ветвлений. Безусловные ветвления обычно не интересны.
  • -d ( --display-progress ): Отображение хода выполнения на стандартном выводе.

Резюме покрытия

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]

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

  • Tcov — инструмент покрытия кода для Solaris, входящий в состав пакета Sun Studio
  • Trucov — предназначен для улучшения Gcov с помощью машиночитаемого вывода.

Ссылки

  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. ^ "СКов".
Retrieved from "https://en.wikipedia.org/w/index.php?title=Gcov&oldid=1252948615"