gcc
Покрытие кода: gcov
Поиск…
замечания
GCC предоставляет некоторую документацию по gcov здесь
Gcovr и Lcov могут использоваться для создания и обобщения результатов покрытия
Вступление
Покрытие кода - это мера, используемая для того, как часто выполняется каждый оператор исходного кода и ветвь. Эта мера обычно требуется при запуске набора тестов для обеспечения того, чтобы как можно больше кода проверялся набором тестов. Его также можно использовать во время профилирования для определения кодовых горячих точек и, следовательно, усилия по оптимизации могут оказать наибольшее влияние.
В GCC покрытие кода обеспечивается утилитой gcov. gcov работает только с кодом, скомпилированным с gcc с определенными флагами. Очень мало других компиляторов, с которыми gcov работает вообще.
компиляция
Перед использованием gcov исходный код должен быть скомпилирован с помощью gcc с использованием двух флагов, -fprofile-arcs и -ftest-coverage . Это говорит компилятору генерировать информацию и код дополнительного объектного файла, требуемый gcov.
gcc -fprofile-arcs -ftest-coverage hello.c
Связывание должно также использовать флаг -fprofile-arcs .
Создать выход
Чтобы создать информацию о покрытии, необходимо выполнить скомпилированную программу. При создании покрытия кода для набора тестов этот шаг выполнения обычно выполняется тестовым пакетом, чтобы охват показывал, какие части программы выполняются, а какие - нет.
$ a.out
Выполнение программы приведет к .gcda файла .gcda в том же каталоге, что и файл объекта.
Впоследствии вы можете вызвать gcov с именем исходного файла программы в качестве аргумента для создания списка кода с частотой выполнения для каждой строки.
$ gcov hello.c
File 'hello.c'
Lines executed:90.00% of 10
Creating 'hello.c.gcov'
Результат содержится в файле .gcov . Вот пример:
-: 0:Source:hello.c
-: 0:Graph:hello.gcno
-: 0:Data:hello.gcda
-: 0:Runs:1
-: 0:Programs:1
-: 1:#include <stdio.h>
-: 2:
-: 3:int main (void)
1: 4:{
1: 5: int i;
-: 6:
1: 7: i = 0;
-: 8:
-: 9:
1: 10: if (i != 0)
#####: 11: printf ("Goodbye!\n");
-: 12: else
1: 13: printf ("Hello\n");
1: 14: return 0;
-: 15:}
Здесь вы можете увидеть номера строк и источник, а также количество раз, когда каждая строка выполнена. Если строка не выполнялась, она помечена знаком ##### .
Счет выполнения является кумулятивным. Если примерная программа была выполнена снова без удаления файла .gcda, счетчик количества попыток каждой строки в источнике будет добавлен к результатам предыдущего запуска.