2009-02-10 16 views
7

Attualmente utilizziamo gcov con la nostra suite di test per l'applicazione Linux C++ e fa un buon lavoro nella misurazione della copertura della linea.È possibile misurare la copertura della funzione con gcov?

Può gcov produrre report di copertura di funzione/metodo oltre alla copertura della linea?

Osservando i parametri accettati da gcov, non penso sia possibile, ma potrei mancare qualcosa. O, probabilmente, c'è qualche altro strumento che può produrre report di copertura di funzione/metodo dalle statistiche generate da gcc?

Aggiornamento: Per copertura di funzione/metodo intendo la percentuale di funzioni che vengono eseguite durante i test.

risposta

6

Immagino che cosa intendi sia l'opzione -f, che ti darà la percentuale di linee coperte per funzione. C'è un interessante articolo su gcov al Dr. Dobb's che potrebbe essere utile. Se "man gcov" non mostra il flag -f, controlla se hai una versione più recente della suite gcc.

Modifica: per ottenere la percentuale di funzioni non eseguite, è possibile semplicemente analizzare l'output di copertura della funzione, in quanto la copertura dello 0,00% dovrebbe essere praticamente equivalente a non chiamata. Questo piccolo script stampa la percentuale di funzioni non eseguita:

#!/bin/bash 

if test -z "$1" 
then 
    echo "First argument must be function coverage file" 
else 
    notExecuted=`cat $1 | grep "^0.00%" | wc -l` 
    executed=`cat $1 | grep -v "^0.00%" | wc -l` 

    percentage=$(echo "scale=2; $notExecuted/($notExecuted + $executed) * 100" |bc) 

    echo $percentage 
fi 
+0

-f l'opzione non è esattamente quello che voglio. Fornisce la copertura della linea per funzione, ma voglio la copertura della funzione/metodo. Ho aggiunto un chiarimento alla domanda. –

6

Abbiamo iniziato ad utilizzare gcov e lcov insieme. I risultati di lcov do includono la percentuale di funzioni che vengono eseguite per il "modulo" che stai guardando.

EDIT: Il modulopuò andare da directory giù ai file.

Voglio anche aggiungere che se stai già utilizzando gli strumenti del compilatore GNU, gcov/lcov non sarà troppo difficile per te da eseguire e i risultati che produce sono davvero impressionanti.

5

L'utilità di lcov è carina e la usiamo. Ma non sono sicuro se ne hai bisogno per quello che vuoi.

Noi

  1. Utilizzare ctags (wikipedia; sourceforge) per trovare tutte le funzioni dichiarate nei file di intestazione rilevanti.

  2. Eseguire GCOV per ottenere la copertura della linea per ogni funzione nel binario.

  3. Confrontare l'elenco di funzioni da 1 & 2 per produrre "Funzioni chiamate"/"Funzioni disponibili".

Lo chiamiamo "copertura API" poiché applichiamo il passaggio n. 1 solo alle intestazioni API pubbliche. Ma puoi farlo su tutte le intestazioni o solo su un sottoinsieme come preferisci. Penso che il rapporto che produciamo in questo modo sia il rapporto che stai cercando.

Problemi correlati