Gcov di riportare i risultati di copertura inaspettati
-
18-09-2019 - |
Domanda
Ho fatto alcune modifiche a una libreria di tenerlo in linea con un progetto. Ho eseguito il test e tutto ancora superato ma la copertura non è più al 100%. Ho studiato e ho visto che il codice viene eseguito solo che non ha riferito. Ma non ho idea del perché gcov non sta inviando rapporti copertura per la linea quando è in esecuzione.
Questo è il codice:
int32_t PreviouslyEncountered(uint32_t n)
{
uint32_t i;
/* Search thru all the numbers encoountered so far see if there is a match */
for(i = 0; i < xcount; i++)
{
if(n == collection[i])
{
return 1; /* This value has been seen before */
}
}
/* Add the number to encountered values if there is space */
if(xcount < NUMBERTRACKERMAX )
{
collection[xcount] = n;
xcount++;
}
else
{
return NUMBERTRACKERMAX ;
}
return 0;
}
Questa è la prova:
/* Fill with 10000 elements */
for(i = 0; i < NUMBERTRACKERMAX; i++)
{
assert(PreviouslyEncountered(i) == 0);
}
/* Test that all 10000 elements are present */
for(i = 0; i < NUMBERTRACKERMAX; i++)
{
assert(PreviouslyEncountered(i) == 1);
}
E questo è il risultato di copertura:
-: 51:int32_t PreviouslyEncountered(uint32_t n)
function PreviouslyEncountered called 201 returned 100% blocks executed 90%
201: 52:{
201: 53: uint32_t i;
-: 54:
-: 55: /* Search thru all the numbers encoountered so far see if there is a match */
20101: 56: for(i = 0; i < xcount; i++)
-: 57: {
19900: 58: if(n == collection[i])
-: 59: {
#####: 60: return 1; /* This value has been seen before */
-: 61: }
-: 62: }
-: 63:
-: 64: /* Add the number to encountered values if there is space */
201: 65: if(xcount < NUMBERTRACKERMAX )
-: 66: {
200: 67: collection[xcount] = n;
200: 68: xcount++;
-: 69: }
-: 70: else
-: 71: {
1: 72: return NUMBERTRACKERMAX ;
-: 73: }
-: 74:
200: 75: return 0;
-: 76:
-: 77:}
L'aggiunta di una stampa prima return 1;
sarebbe eseguire. Non sarebbe ottenere una copertura, ma il return 1
sarebbe ora hanno copertura. Qualche idea? altro che le pagine man non posso trovare niente.
Modifica:
Dai commenti si può vedere che io non ha rivelato tutto. Ho fatto qualche progresso sul problema. Alcuni degli altri test altre funzioni causano il coperchio a scomparire quando corrono. Esecuzione solo i test per PreviouslyEncountered
dà il 100 per cento di copertura per quella funzione. Esecuzione di altri test azzera questo.
Soluzione
Sono stato in grado di refactoring del codice che ha causato il problema in modo io sono sempre di nuovo una copertura del 100%. Non ho idea di dove il problema è venuto da. Forse mi controllerò di nuovo.