Gcov - Википедия - Gcov

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

Gcov это покрытие исходного кода анализ и ведомость за ведомостью профилирование инструмент. Gcov генерирует точный подсчет количества выполнений каждого оператора в программе и аннотирует исходный код добавить приборы. Gcov поставляется как стандартная утилита с Коллекция компиляторов GNU (GCC) люкс.[1]

Утилита gcov дает информацию о том, как часто программа выполняет сегменты кода.[2] Он создает копию исходного файла с пометкой частоты выполнения. Утилита gcov не производит никаких временных данных и работает только с кодом, скомпилированным с помощью пакета GCC. В руководстве утверждается, что оно несовместимо с каким-либо другим механизмом профилирования или тестового покрытия.[3] но он работает с llvm -сгенерированные файлы тоже.

Описание

gcov производит анализ тестового покрытия специально оснащенного программа. Варианты -fprofile-arcs -ftest-охват следует использовать для компиляции программы для анализа покрытия (первый вариант для записи статистики ветвлений, второй для сохранения счетчика выполненных строк); -fprofile-arcs также следует использовать для связывания программы.[2] После запуска такая программа создаст несколько файлов с расширениями (суффиксами) «.bb», «.bbg» и «.da», которые можно будет проанализировать с помощью gcov. Он принимает исходные файлы в качестве аргументов командной строки и создает аннотированный список источников. Каждая строка исходного кода имеет префикс, указывающий количество раз, когда она была выполнена; строки, которые не были выполнены, имеют префикс "#####".[2]

gcov создает файл журнала с именем sourcefile.gcov который указывает, сколько раз каждая строка исходного файла sourcefile.c выполнил. Этот аннотированный исходный файл можно использовать с гпроф, еще один инструмент профилирования для извлечения информации о времени программы.

Пример

Следующая программа, написанная на Язык программирования C, петли над целыми числами от 1 до 9 и проверяет их делимость с помощью оператора модуля (%).

#включают <stdio.h>intглавный (пустота){  int я;  за (я = 1; я < 10; я++)    {      если (я % 3 == 0)        printf ("% d делится на 3 п", я);      если (я % 11 == 0)        printf ("% d делится на 11 п", я);    }  возвращаться 0;}

Чтобы включить тестирование покрытия, программа должна быть скомпилирована со следующими параметрами:

$ gcc -Wall -fprofile-arcs -ftest-охват cov.c

где cov.c - имя файла программы. Это создает инструментальную исполняемый файл который содержит дополнительные инструкции, которые записывают, сколько раз выполняется каждая строка программы. Опция -ftest-охват добавляет инструкции для подсчета количества выполнений отдельных строк, а -fprofile-arcs включает инструментальный код для каждой ветви программы. Инструментарий ветвления записывает, как часто используются разные пути с помощью операторов if и других условных выражений. В исполняемый файл затем необходимо запустить для создания данных покрытия. Данные из цикла записываются в несколько файлов с расширениями «.bb», «.bbg» и «.da» соответственно в текущем каталог. Эти данные можно проанализировать с помощью команды gcov и имени исходного файла:

$ gcov cov.c  88,89% из 9 строк исходного кода выполнено в файле cov.cСоздание cov.c.gcov

В gcov команда создает аннотированную версию оригинала исходный файл с расширением файла «.gcov», содержащим подсчет количества раз, когда каждая строка была выполнена:

        #включают <stdio.h>        int        главный (пустота)        {     1    int я;    10    за (я = 1; я < 10; я++)            {     9        если (я % 3 == 0)     3          printf ("% d делится на 3 п", я);     9        если (я % 11 == 0)###### printf ("% d делится на 11  n", i);     9      }     1    возвращаться 0;     1  }

Количество строк можно увидеть в первом столбце вывода. Строки, которые не были выполнены, помечаются хешами «######».

Параметры командной строки

Утилита командной строки Gcov поддерживает следующие параметры при создании файлов с аннотациями из данных профиля:[4][5]

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

Сводные данные о покрытии

Львов это графический интерфейс для gcov. Он собирает данные gcov для нескольких исходных файлов и создает HTML страницы, содержащие исходный код, аннотированный информацией о покрытии. Он также добавляет обзорные страницы для удобной навигации по файловой структуре. Lcov поддерживает измерение покрытия операторов, функций и ветвей.[6] Также есть Версия для Windows.

Gcovr предоставляет утилиту для управления использованием gcov и создания итоговых результатов покрытия кода. Эта команда основана на пакете Python extension.py, который предоставляет аналогичную утилиту в Python. Gcovr создает компактные, удобочитаемые сводные отчеты, машиночитаемые отчеты XML или графическое резюме в формате HTML. XML-отчеты, созданные gcovr, могут использоваться Дженкинс для предоставления графических обзоров покрытия кода. Gcovr поддерживает измерение покрытия операторов и филиалов[7]

SCov - это утилита, обрабатывающая промежуточный текстовый формат, созданный gcov (с использованием gcov -i), для создания отчетов о покрытии кода. Эти отчеты могут быть простыми текстовыми отчетами или HTML страницы с более подробными отчетами.[8]

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

  • Тцов - инструмент покрытия кода для Solaris, входящий в пакет Sun Studio

Рекомендации

  1. ^ «Как работает GCOV - инструментальная часть GCC» (PDF). Архивировано из оригинал (PDF) 9 апреля 2014 г.. Получено 12 февраля, 2012. Цитировать журнал требует | журнал = (помощь)
  2. ^ а б c Брайан Дж. Гоф. Введение в GCC - для компиляторов GNU gcc и g ++ - тестирование покрытия с помощью gcov. Получено 12 февраля, 2012.
  3. ^ "страница руководства gcov". Получено 12 февраля, 2012.
  4. ^ gnu.org. "Параметры командной строки Gcov". Получено 11 февраля, 2012.
  5. ^ команды linux. "Параметры командной строки Gcov". Архивировано из оригинал на 2013-01-08. Получено 12 февраля, 2012.
  6. ^ "Львов".
  7. ^ "Гцовр".
  8. ^ «СЦов».