Perché gcov rapporto di copertura 0% su un file di intestazione per una classe ben utilizzati?

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

Domanda

sto cercando di misurare la copertura di test per la prima volta utilizzando gcov . Ora che sono oltre la curva di apprendimento iniziale, le cose sembrano andare per il meglio, tranne che per un piccolo intoppo. Mi aspetto che si riduce a una mancanza di comprensione da parte mia, così sto sperando che qualcuno familiarità con gcov può spiegare cosa sta succedendo.

Il problema è che ho un particolare file di intestazione che mostra una copertura 0%. Tuttavia il solo cosa che nell'intestazione è una dichiarazione di classe per una classe ben utilizzato.

Inoltre, il file di implementazione per la classe mostra una copertura del 100%, e posso puntare a 5 diverse prove dove so per certo che la classe viene creata un'istanza con successo.

Quindi, perché sarebbe gcov rapporto di copertura 0% sulla classe, e come posso risolvere il problema?

- Modifica -

Come lacqui sottolineato di seguito, se l'intestazione non ha codice eseguibile, non dovrebbe essere incluso nei calcoli di copertura. E infatti, per tutti i miei corsi, quel particolare file di intestazione è l'unico che gcov sta cercando di generare informazioni copertura per.

Ho fatto un confronto linea per linea con le altre intestazioni, e la differenza più grande che ho trovato era che questa intestazione particolare non ha un costruttore esplicito o distruttore, mentre gli altri fanno. Nel tentativo di ridurre al minimo le differenze tra i file, ho aggiunto un ctor esplicito e dtor alla classe problema. Tuttavia, questo non ha fatto alcuna differenza.

È stato utile?

Soluzione

Sembra che ho risolto il problema. Come mi aspettavo, è più di un problema di mancanza-of-esperienza, di ogni altra cosa.

Come si è visto, gcov stava solo trovare un sottoinsieme delle tracefiles disponibili, ed è stato quindi riportando solo una parte dei risultati totali. Trovare e aggiungendo il resto dei tracefiles risolto il problema.

Per tutti quelli che sono curiosi, il file di intestazione problematico mostra ancora in alto l'uscita. In realtà, tutti gli altri file di intestazione fare troppo, anche se non contengono codice eseguibile. Tuttavia, tutti mostrano una copertura 90 +%.

Altri suggerimenti

C ++ crea distruttore implicito, anche se non si è creato uno in modo esplicito. Se non distruggervi oggetto prima di fine del programma, questo distruttore implicito mai ottenere chiamato. gcov mostrare questa segnando un '0' contatore sulla linea di dichiarazione di classe.

Il file di intestazione non contiene codice eseguito. Dal momento che nulla viene eseguito (non c'è codice eseguito in una dichiarazione di classe), non c'è niente da misurare, e niente da coprire.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top