Разработчик(и) | Корпорация Оракул |
---|---|
Операционная система | Солярис |
Платформа | СПАРК |
Тип | Покрытие кода |
Лицензия | Бесплатная загрузка и использование, как описано в лицензии на продукт Sun Studio . |
Веб-сайт | разработчики.sun.com |
Tcov — это инструмент анализа покрытия исходного кода и пооператорного профилирования для программного обеспечения, написанного на Fortran , C и C++ . Tcov генерирует точные подсчеты количества выполнений каждого оператора в программе и аннотирует исходный код для добавления инструментария. Это стандартная утилита, предоставляемая бесплатно с программным обеспечением Sun Studio .
Утилита tcov предоставляет информацию о том, как часто программа выполняет сегменты кода. Она создает копию исходного файла, аннотированную с указанием частоты выполнения. Код может быть аннотирован на уровне базового блока или на уровне исходной строки. Поскольку операторы в базовом блоке выполняются одинаковое количество раз, количество выполнений базового блока равно количеству раз, когда выполняется каждый оператор в блоке. Утилита tcov не создает никаких временных данных.
tcov производит анализ тестового покрытия скомпилированной программы . tcov принимает исходные файлы в качестве аргументов и создает аннотированный исходный листинг. Каждый базовый блок кода (или каждая строка, если указана конкретная опция tcov) имеет префикс с указанием количества раз, которое он был выполнен; строки, которые не были выполнены, имеют префикс "#####".
Утилита tcov также помещает сводку в конец аннотированного листинга программы. Статистика для наиболее часто выполняемых базовых блоков перечислена в порядке частоты выполнения. Номер строки — это номер первой строки в блоке.
Существует две реализации tcov:
Расширенный анализ покрытия устраняет некоторые недостатки исходного инструмента анализа, такие как: [3]
Для генерации аннотированного исходного кода необходимо выполнить следующие три шага: [4]
Каждый последующий запуск накапливает больше данных покрытия в файле данных профиля. Данные для каждого объектного файла обнуляются при первом запуске программы после перекомпиляции. Данные для всей программы обнуляются путем удаления файла tcovd. [5]
Ниже описаны выше шаги для исходного и улучшенного tcov:
Исходный код компилируется с опцией -xa для программы на C и опцией -a для программ на Fortran и C++. Компилятор создает файл данных покрытия с суффиксом .d для каждого объектного файла. Файл данных покрытия создается в каталоге, указанном переменной окружения TCOVDIR . Если TCOVDIR не установлен, файл данных покрытия создается в текущем каталоге. Запускается указанная выше инструментированная сборка, и по завершении программы обновляются файлы .d . Наконец, запускается команда tcov для генерации аннотированных исходных файлов. Синтаксис команды tcov следующий:
tcov параметры исходный-файл-список
Здесь source-file-list — это список имен файлов исходного кода. Для списка опций, вывод tcov по умолчанию — это набор файлов, каждый с суффиксом .tcov , который можно изменить с помощью опции -o filename.
Программа, скомпилированная для анализа покрытия кода, может быть запущена несколько раз (с потенциально меняющимися входными данными); tcov можно использовать в программе после каждого запуска для сравнения поведения.
Исходный код компилируется с опцией -xprofile=tcov . В отличие от исходного режима, улучшенный tcov не генерирует никаких файлов во время компиляции. [6] Вышеуказанная инструментированная сборка запускается, и по завершении программы создается каталог для хранения данных профиля, и в этом каталоге создается один файл данных покрытия, называемый tcovd . tcovd содержит информацию о номерах строк и количестве выполнений. Это простой текстовый файл. По умолчанию каталог создается в месте, где запускается программа, и он называется в честь исполняемого файла и имеет суффикс .profile . Каталог также известен как сегмент профиля . Расположение сегмента профиля можно переопределить, установив переменные среды SUN_PROFDATA_DIR или SUN_PROFDATA . Наконец, команда tcov запускается для генерации аннотированных исходных файлов. Синтаксис команды tcov такой же, как и у исходной команды, за исключением обязательной опции -x .
параметры tcov -x profilebucket исходный-файл-список
Единственное отличие команды от оригинального tcov — обязательное добавление опции -x dir для обозначения улучшенного tcov.
Следующая программа, написанная на языке программирования 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 ; }
Для включения тестирования покрытия программа должна быть скомпилирована со следующими параметрами:
для покрытия кода старого стиля ,
cc -xa cov.c
и для нового стиля покрытия кода,
cc -xprofile=tcov -o cov cov.c
где cov.c — имя файла программы. Это создает инструментированный исполняемый файл , который содержит дополнительные инструкции, которые записывают количество выполнений каждой строки программы. Параметр -o используется для задания имени исполняемого файла. Затем исполняемый файл должен быть запущен для создания данных покрытия. Создание и расположение этого файла различаются для анализа кода старого и нового стилей. В анализе старого стиля этот файл с расширением .d , созданный после компиляции , либо в каталоге TCOVDIR , либо в текущем, обновляется данными покрытия. В анализе нового стиля файл данных покрытия с именем tcovd создается в каталоге <имя исполняемого файла>.profile . Эти данные можно проанализировать с помощью команды tcov и имени исходного файла:
для покрытия кода старого стиля ,
tcov cov.c
и для нового стиля покрытия кода,
tcov -x cov.profile cov.c
аргументом сложения в новом стиле анализа является profile bucket . Команда tcov создает аннотированную версию исходного файла с расширением файла '.tcov', содержащую счетчики количества выполнений каждой строки:
#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 }
Утилита tcov также помещает сводку в конец аннотированного листинга программы. Статистика для наиболее часто выполняемых базовых блоков перечислена в порядке частоты выполнения. Номер строки — это номер первой строки в блоке.
Утилита командной строки Tcov поддерживает следующие параметры при создании аннотированных файлов из данных профиля: [7]