Buscar..


Observaciones

GCC proporciona alguna documentación de gcov aquí

Gcovr y Lcov se pueden usar para ayudar a generar y resumir los resultados de la cobertura

Introducción

La cobertura de código es una medida que se utiliza para determinar la frecuencia con la que se ejecuta cada instrucción de código fuente y rama. Esta medida suele ser necesaria cuando se ejecuta un conjunto de pruebas para garantizar que la mayor parte del código sea probado por el conjunto de pruebas. También se puede utilizar durante el perfilado para determinar los puntos críticos del código y, por lo tanto, donde los esfuerzos de optimización pueden tener el mayor efecto.

En el código GCC la cobertura es proporcionada por la utilidad gcov. gcov funciona solo con el código compilado con gcc con indicadores particulares. Hay muy pocos compiladores con los que funciona gcov.

Compilacion

Antes de usar gcov, el código fuente debe compilarse con gcc utilizando los dos indicadores, -fprofile-arcs y -ftest-coverage . Esto le dice al compilador que genere la información y el código de archivo de objeto adicional requerido por gcov.

gcc -fprofile-arcs -ftest-coverage hello.c

La vinculación también debe utilizar el -fprofile-arcs .

Generar salida

Para generar la información de cobertura se debe ejecutar el programa compilado. Cuando se crea una cobertura de código para un conjunto de pruebas, este paso de ejecución normalmente lo realizará el conjunto de pruebas para que la cobertura muestre qué partes del programa ejecutan las pruebas y cuáles no.

$ a.out

La ejecución del programa hará que se .gcda un archivo .gcda en el mismo directorio que el archivo objeto.

Posteriormente, puede llamar a gcov con el nombre del archivo fuente del programa como un argumento para producir una lista del código con la frecuencia de ejecución para cada línea.

$ gcov hello.c
File 'hello.c'
Lines executed:90.00% of 10
Creating 'hello.c.gcov'

El resultado está contenido en un archivo .gcov . Aquí hay una muestra:

         -:    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:}

Aquí puede ver los números de línea y la fuente y el número de veces que se ejecutó cada línea. Si una línea no se ejecutó, se marca con ##### .

Los recuentos de ejecución son acumulativos. Si el programa de ejemplo se ejecutó de nuevo sin eliminar el archivo .gcda, el recuento del número de veces que se ejecutó cada línea en la fuente se agregaría a los resultados de la ejecución anterior.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow