¿Por qué gcov reportar la cobertura del 0% en un fichero de cabecera para una clase bien utilizado?

StackOverflow https://stackoverflow.com/questions/784379

Pregunta

Estoy intentando medir cobertura de la prueba por primera vez el uso de gcov . Ahora que estoy más allá de la curva de aprendizaje inicial, las cosas parecen ir bien, excepto por un pequeño inconveniente. Espero que todo se reduce a una falta de comprensión de mi parte, así que estoy esperando que alguien familiarizado con gcov puede explicar lo que está pasando.

El problema es que tengo un archivo de cabecera particular, mostrando la cobertura 0%. Sin embargo, el solamente cosa en esa cabecera es una declaración de clase para una clase bien utilizado.

Además, el archivo de implementación para la clase muestra una cobertura del 100%, y puedo apuntar a 5 diferentes pruebas en las que sé que es un hecho que la clase se crea correctamente la instancia.

Así que ¿por qué gcov reportar la cobertura del 0% en la clase, y cómo puedo solucionarlo?

- Editar -

Como lacqui señala más adelante, si la cabecera no tiene código ejecutable, no debe ser incluido en los cálculos de cobertura. Y, de hecho, de todas mis clases, ese archivo de cabecera en particular es el único que gcov está tratando de generar información para la cobertura.

He hecho una comparación línea por línea con las otras cabeceras, y la diferencia más grande que encontré fue que esta cabecera en particular no tiene un constructor explícito o destructor, mientras que los otros hacen. En un intento de minimizar las diferencias entre los archivos, añadí una ctor explícita y dtor a la clase de problema. Sin embargo, esto no hace ninguna diferencia.

¿Fue útil?

Solución

Parece que he solucionaron el problema. Como esperaba, es más una cuestión de falta de experiencia, que cualquier otra cosa.

Como resultado, gcov única era encontrar un subconjunto de los tracefiles disponibles, y por lo tanto se informa sólo una parte de los resultados totales. Encontrar y añadir el resto de los tracefiles resuelto el problema.

Para cualquier que son curiosos, el archivo de cabecera problemática todavía aparece en la salida. De hecho, todos los demás archivos de cabecera lo hacen también, a pesar de que no contienen código ejecutable. Sin embargo, todos ellos muestran una cobertura del 90% +.

Otros consejos

C ++ crea destructor implícita, incluso si no se ha creado una forma explícita. Si no destruiros objeto antes del fin del programa, este destructor implícito nunca llegan llama. gcov mostrar esta marcando un '0' contador en la línea de declaración de la clase.

Su archivo de cabecera no contiene código que se ejecuta. Dado que no se ejecuta nada (no hay código que se ejecuta en una declaración de la clase), no hay nada de medir, y nada a cubrir.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top