As referências deste artigo necessitam de formatação. (Julho de 2018) |
Sistema operacional | Unix-like |
Gênero(s) | Cobertura de código |
Licença | GNU General Public License |
Página oficial | gcc |
Gcov é uma ferramenta de análise de cobertura de código fonte e de criação de perfil por instruções passo-a-passo. Gcov gera contagens exatas do número de vezes que cada instrução em um programa é executada e anota o código-fonte para adicionar instrumentação. Gcov vem como um utilitário padrão com o pacote GNU Compiler Collection (GCC).[1]
O utilitário gcov fornece informações sobre a frequência com que um programa executa segmentos de código. Ele produz uma cópia do arquivo fonte, anotado com as frequências de execução. O utilitário gcov não produz quaisquer dados baseados em tempo, e só funciona em código compilado com o pacote GCC. O manual afirma que ele não é compatível com qualquer outro perfil ou mecanismo de cobertura de testes,[2] mas ele funciona também com arquivos gerados pelo llvm.
gcov produz uma análise de cobertura de teste de um programa especialmente instrumentado. As opções -fprofile-arcs -ftest-covegare
devem ser usadas para compilar o programa para análise de cobertura (a primeira opção para registrar estatísticas de ramificação e a segunda para salvar a contagem de execuções das linhas); -fprofile-arcs
também deve ser usado para vincular o programa. Após executar esse programa, serão criados vários arquivos com extensões ".bb" ".bbg" e ".da" (sufixos), que podem ser analisados pleo gcov. Ele usa arquivos de origem como argumentos de linha de comando e produz um listagem anotada de fontes. Cada linha do código-fonte é prefixada com o número de vezes que foi executada; as linhas que não foram executadas são prefixadas com "#####".[3]
gcov cria um arquivo de registro chamado sourcefile.gcov que indica quantas vezes cada linha de um arquivo de origem sourcefile.c foi executada. Este arquivo de origem anotado pode ser usado com o gprof, outra ferramenta de análise para extrair informações de temporização sobre o programa.
O programa a seguir, escrito em linguagem de programação C, itera sobre os inteiros de 1 a 9 e testa a sua divisibilidade com o operador módulo (%).
#include <stdio.h>
int
main (void)
{
int i;
for (i = 1; i < 10; i++)
{
if (i % 3 == 0)
printf ("%d é divisível por 3\n", i);
if (i % 11 == 0)
printf ("%d é divisível por 11\n", i);
}
return 0;
}
Para ativar a cobertura de testes, o programa deve ser compilado com as seguintes opções:
gcc -Wall -fprofile-arcs -ftest-coverage cov.c
onde cov.c é o nome do arquivo do programa. Isso cria um executável instrumentado que contém instruções adicionais que registram o número de vezes que cada linha do programa é executada. A opção -ftest-coverage adiciona instruções para contar o número de vezes que linhas individuais são executadas, enquanto -fprofile-arcs incorpora instrumentação de código para cada ramificação do programa. A instrumentação de ramificação registra a frequência com que diferentes caminhos são obtidos pelas instruções de decisão ‘if’ e outras estruturas condicionais. O executável deve então ser executado para criar os dados de cobertura. Os dados da execução são escritos para vários arquivos com as extensões ‘.bb’ ‘.bbg’ e ‘.da’ respectivamente no diretório atual. Esses dados podem ser analisados usando o comando gcov e o nome de um arquivo de origem:
gcov cov.c 88.89% of 9 source lines executed in file cov.c Creating cov.c.gcov
O comando gcov command produz uma versão anotada do arquivo fonte original, com a extensão de arquivo ‘.gcov’, contendo contagens do número de vezes que cada linha foi executada:
#include <stdio.h>
int
main (void)
{
1 int i;
10 for (i = 1; i < 10; i++)
{
9 if (i % 3 == 0)
3 printf ("%d é divisível por 3\n", i);
9 if (i % 11 == 0)
###### printf ("%d é divisível por 11\n", i);
9 }
1 return 0;
1 }
As contagens de linha podem ser vistas na primeira coluna da saída. Linhas que não foram executadas são marcadas com cerquilhas '######'.
O utilitário de linha de comando Gcov suporta as seguintes opções ao gerar arquivos anotados dos dados de perfil:[4][5]
Lcov é uma interface gráfica para o gcov. Ele coleta dados do gcov para vários arquivos fonte e cria páginas HTML contendo o código-fonte anotado com informações de cobertura. Ele também adiciona páginas de visão geral para facilitar a navegação pela estrutura de arquivos. Lcov suporta declaração, função, e medição de cobertura de ramificação.[6] Há também uma versão para Windows.
Gcovr fornece um utilitário para gerenciar o uso do gcov e gerar resumos dos resultados de cobertura de código. Esse comando é inspirado no pacote Python coverage.py, que fornece um utilitário semelhante no Python. O Gcovr produz relatórios resumidos compactos e legíveis por humanos, relatórios em XML legíveis por máquina ou um resumo gráfico em HTML. Os relatórios XML gerados pelo gcovr podem ser usados pelo Jenkins para fornecer resumos gráficos de cobertura de código. O Gcovr suporta declaração e medição de cobertura de ramificação[7]