Jump to content

Гков

gcov
Операционная система Unix-подобный
Тип Покрытие кода
Лицензия Стандартная общественная лицензия GNU и другие лицензии свободного программного обеспечения. [ который? ]
Веб-сайт GCC .gnu .org /онлайндокументы /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 is divisible by 3\n", i);
    if (i % 11 == 0)
      printf ("%d is divisible by 11\n", i);
  }

  return 0;
}

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

$ gcc -Wall -fprofile-arcs -ftest-coverage cov.c

где cov.c — имя файла программы. При этом создается инструментированный исполняемый файл , который содержит дополнительные инструкции, записывающие количество выполнений каждой строки программы. Вариант -ftest-coverage добавляет инструкции для подсчета количества выполнения отдельных строк, а -fprofile-arcs включает код инструментирования для каждой ветви программы. Инструментарий ветвей записывает, как часто используются разные пути через операторы «if» и другие условные выражения.

Затем можно запустить исполняемый файл для анализа кода и создания данных о покрытии.

$ ./a.out

Данные прогона записываются в несколько файлов данных покрытия с расширениями «.bb», «.bbg» и «.da» соответственно в текущем каталоге .

Если выполнение программы зависит от входных параметров или данных, ее можно запускать несколько раз, а результаты будут накапливаться в файлах данных покрытия для общего анализа.

Эти данные можно проанализировать с помощью команды gcov и имени исходного файла:

$ gcov cov.c 
 88.89% of 9 source lines executed in file cov.c
Creating 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 is divisible by 3\n", i);
     9      if (i % 11 == 0)
######        printf ("%d is divisible by 11\n", i);
     9    }

     1    return 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 каталог|файл ( --object-directory каталог или --object-file файл ): укажите либо каталог, содержащий файлы данных gcov, либо имя пути к объекту. С помощью этой опции осуществляется поиск файлов данных .gcno и .gcda. Если указан каталог, файлы данных находятся в этом каталоге и называются по имени входного файла без его расширения. Если здесь указан файл, файлы данных называются в честь этого файла без его расширения.
  • Каталог -s ( каталог --source-prefix ): префикс для имен исходных файлов, который необходимо удалить при создании выходных файлов покрытия. Эта опция полезна при сборке в отдельном каталоге, а путь к исходному каталогу не требуется при определении имен выходных файлов. Обратите внимание, что это обнаружение префикса применяется до определения того, является ли исходный файл абсолютным.
  • -u ( --unconditional-branches ): если заданы вероятности ветвей, включаются вероятности безусловных ветвей. Безусловные переходы обычно не интересны.
  • -d ( --display-progress ): отображать прогресс на стандартном выводе.

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

[ редактировать ]

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

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

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

См. также

[ редактировать ]
  • Tcov — инструмент покрытия кода для Solaris, входящий в пакет Sun Studio.
  1. ^ «Как работает Gcov — инструментальная часть GCC» (PDF) . Архивировано из оригинала (PDF) 9 апреля 2014 г. Проверено 12 февраля 2012 г. {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь )
  2. ^ Jump up to: а б с Брайан Дж. Гоф. Введение в GCC — для компиляторов GNU gcc и g++ — Тестирование покрытия с помощью gcov . Проверено 12 февраля 2012 г.
  3. ^ «Справочная страница gcov» . Проверено 12 февраля 2012 г.
  4. ^ "gcov llvm" . Проверено 12 ноября 2022 г.
  5. ^ gnu.org. «Параметры командной строки Gcov» . Проверено 11 февраля 2012 г.
  6. ^ команды Linux. «Параметры командной строки Gcov» . Архивировано из оригинала 23 мая 2012 г. Проверено 12 февраля 2012 г.
  7. ^ «Льков» .
  8. ^ «Гковр» .
  9. ^ «СКов» .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 60030d095d8dd2285ce7dfd47ef8979a__1689153060
URL1:https://arc.ask3.ru/arc/aa/60/9a/60030d095d8dd2285ce7dfd47ef8979a.html
Заголовок, (Title) документа по адресу, URL1:
Gcov - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)