2012-12-19 22 views
5

Sto cercando di usare gcov su Linux (Ubuntu) per vedere la frequenza di esecuzione per ogni linea di origine.gcov non mostra alcun dato di copertura

ho aggiunto seguente bandiere al mio compilatore gcc e le bandiere linker,

CCFLAGS = -fprofile-arcs -ftest-coverage 
LDFLAGS = -fprofile-arcs -lgcov 

ma dopo la compilazione e l'esecuzione del programma, vedo nessun file .gcda * creato. Come risultato di che quando corro

gcov --object-directory <path to the *.gcno/*.gcda files> myfile.cpp 

Spettacoli errore:

myfile.gcda:cannot open data file, assuming not executed 
File '../../../../../code/myfile.cpp' 
Lines executed:0.00% of 2625 

mi manca qualcosa. Come risolvere questo?

+0

Il programma ha eseguito con successo a compimento? –

+0

Inoltre, cosa ottieni quando esegui 'stringhe compiled_prog | grep gcda'? –

+0

@Shawn - È un servizio/demone che non ritorna. Quindi essenzialmente devo CTRL-C l'eseguibile nel terminale per fermarlo. Questo influenza il comportamento di gcov. So che gprof non genera dati di profilazione per tali processi che non escono(). Anche GCOV ha questa limitazione. – goldenmean

risposta

4

È possibile utilizzare il metodo __gcov_flush() all'interno del codice. Avrete bisogno di richiamarlo dal gestore di segnale registrato.

See:

https://www.osadl.org/fileadmin/dam/interface/docbook/howtos/coverage.pdf

Usando questo, si può mantenere il vostro servizio in esecuzione ed emissione "uccidere" ogni volta che avete bisogno di scaricare i dati di copertura.

speranza che aiuta ....

0

assicurarsi che il gcov e gcc sono della stessa versione :), questo, dove molte delle persone non riescono a controllare.

$gcc --version 
gcc (GCC) 4.1.1 
Copyright (C) 2006 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. There is NO 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

$ find /usr/lib/gcc -name libgcov.a 
/usr/lib/gcc/x86_64-redhat-linux/4.1.1/32/libgcov.a 
/usr/lib/gcc/x86_64-redhat-linux/4.1.1/libgcov.a 
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/32/libgcov.a 
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/libgcov.a 

così la versione gcc aver caricato dovrebbe essere atleast nella lista dei disponibili libgcov.a

Problemi correlati