2012-09-10 8 views
10

estoy tratando de usar lcov para métricas de cobertura de código, pero no puedo lograr que la cobertura de sucursales funcione.generando datos de cobertura de sucursal para lcov

Así es como lo estoy usando:

g++ -ggdb3 --coverage src/read.c tests/test.cpp -o bin/test 
lcov --zerocounters --directory $PWD 
lcov --capture --initial --directory $PWD --output-file coverage_output 
./bin/test 
lcov --no-checksum --directory $PWD --capture --output-file coverage_output 
genhtml --branch-coverage --highlight --legend --output-directory out coverage_output 

pero consigo:

tasa de cobertura general:
líneas ......: 100,0% (60 de 60 líneas
) funciones ..: 100,0% (26 de 26)
funciones ramas ...: no se encontraron datos

alguna idea?

Respuesta

1

Lo siento, no tanto una "idea" como una confirmación de que está haciendo todo correctamente. Sus comandos exactos trabajado en este código simple: tabla de cobertura

#include <iostream> 
using namespace std; 

bool foo(int i) 
{ 
    if (i != 0) { 
     return 12/i; 
    } else { 
     return 0; 
    } 
} 

int main(int argc, char** argv) 
{ 
    cout << foo(argc) << endl; 
    return 0; 
} 

El lcov tiene estadísticas para las líneas, Funciones y Ramas. ¿Tal vez vuelva a verificar que realmente está mirando el HTML de salida correcto?

+0

Hola Tom, tu ejemplo tampoco funciona para mí. La salida del comando dice "ramas ...: no se encontraron datos", así que no creo que me falta algo en el html. Pero, gracias! Si puede ver los datos de la bifurcación usando mis comandos, es posible que haya un problema de instalación o algo relacionado con la herramienta. – Hugo

+0

Probablemente utilizó una versión antigua de LCOV (<1.11) donde la recopilación de datos de rama estaba activada . – maxschlepzig

19

La última versión de LCOV deshabilita la cobertura de sucursales de forma predeterminada.

es necesario volver a habilitarlo mediante:

  • editar su archivo .lcovrc (copiado de/etc/lcovrc) para cambiar lcov_branch_coverage entorno a 1
  • añadiendo --rc lcov_branch_coverage=1 a sus líneas de comando lcov
+4

como lo dice Abhay Joshi a continuación: recuerde agregar la línea --rc en cada invocación de lcov, de lo contrario, soltará las estadísticas de la rama. Además, la opción genhtml es --rc genhtml_branch_coverage = 1 – garph0

+1

¿Sabe usted, por casualidad, los motivos de ese cambio? Intuitivamente, esto se siente muy mal. – Griwes

+0

La recopilación de datos de sucursal se deshabilitó en 2012 (es decir, lcov versión 1.11).El cambio indica algunas posibles implicaciones de rendimiento al habilitar esta función (https://github.com/linux-test-project/lcov/commit/263de2b40e21193ef8d11e899eb55aa52b17225d). Lo notable que son depende del tamaño de su programa. Por lo general, esto no debería ser un problema. – maxschlepzig

0

según este post, la diferencia puede depender de la versión de gcc que esté utilizando. ¿Puedes compartir qué versiones estás usando? No estoy recibiendo cobertura de sucursales en:

i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00) 
+0

Este es otro problema: la cadena de versión parece implicar que se trata de alguna versión de clang de LLVM de Apple que se utiliza en lugar de GCC. Y se sabe que LLVM genera datos de cobertura en una versión de formato antiguo que generalmente es incompatible con lo que LCOV espera. – maxschlepzig

3

archivos .lcovrc es el archivo de configuración que hay que colocar la ruta del archivo lcov. Francamente, no investigué mucho sobre el uso de este archivo.

Debe agregar un parámetro adicional como "--rc lcov_branch_coverage = 1" a lcov para todas las llamadas. En su caso, agregue este parámetro a todas sus tres llamadas. Si pierde una, se eliminará la cobertura de la sucursal.

También se necesita cobertura de gen para genhtml.

+0

Desafortunadamente, veo 'geninfo: Nota:" inicial no genera datos de cobertura de rama ", por lo que al menos uno de ellos no se ejecutará con cobertura de sucursal. –

Cuestiones relacionadas