2009-05-08 7 views
21

J'ai récemment commencé à utiliser lcov pour visualiser ma couverture de code. C'est un excellent outil. Une chose que je remarque est qu'il génère des rapports de couverture de code pour tous les fichiers que j'utilise - y compris ceux qui ne m'intéressent pas. Par exemple, il me donnera des rapports de couverture de code pour boost et fichiers mysql ++.Existe-t-il un moyen de centrer les rapports de couverture de code lcov sur un ou deux répertoires?

Existe-t-il un moyen facile de forcer lcov à générer uniquement des rapports de couverture pour des fichiers spécifiques?

J'ai essayé d'utiliser le paramètre -k comme ceci: (. Cela veut dire que je veux que les fichiers de couverture "include" et "src" répertoires)

 
/usr/bin/lcov -q -c -i -b . -d .obj -k src/ -k include/ -o app_base.info 

{run unit tests now} 

/usr/bin/lcov -q -c -b . -d .obj -k src/ -k include/ -o app_test.info 
/usr/bin/lcov -q -a app_base.info -a app_test.info -o app_total.info 
/usr/bin/genhtml -q -o lcov_output_directory app_total.info 

Toutefois, cette doesn ne semble pas fonctionner. Le rapport me montre toujours tous les fichiers superflus. Toutes les suggestions sont très appréciées. Merci!

Répondre

25

lcov prend en charge un argument de ligne de commande - supprimez pour faire exactement ce que vous demandez.

+9

L'option '--extract' peut être plus utile. Générez le fichier de trace avec tout, puis extrayez uniquement les répertoires qui vous intéressent dans un second fichier de trace. – Dan

+1

Jetez un coup d'oeil à [cette page] (http://qiaomuf.wordpress.com/2011/05/26/use-gcov-and-lcov-to-know-your-test-coverage/) qui a une grande utilité exemple de l'utilisation --remove. –

2

Une approche possible consiste à contraindre quels fichiers sont compilés avec les indicateurs de couverture (-fprofile-arcs -ftest-coverage). Si vous ne voulez pas que votre système de fichiers make soit sélectif quant aux fichiers construits avec l'instrumentation de test, l'astuce suivante peut fonctionner pour vous:

  • Créez votre application sans instrumentation.
  • Supprimez les fichiers .o de la source que vous voulez instrumenter
  • Activez l'instrumentation et reconstruisez-la. Seuls les fichiers objets supprimés seront reconstruits avec des instruments.
  • Run lcov

Cela devrait entraîner que les zones ciblées émettant des artefacts Gcov, qui sont aveuglément consommés par les scripts lcov.

27

J'ai utilisé l'indicateur --no-external avec --directory pour exclure les fichiers indésirables.

La définition externe de l'homme:

fichiers sources externes sont des fichiers qui ne sont pas situés dans l'un des répertoires spécifiés par répertoire --base --directory ou.

Alors ma commande ressemblait à ceci:

$ lcov --directory src -c -o report.info --no-external 
Capturing coverage data from src 
Found gcov version: 4.2.1 
Scanning src for .gcda files ... 
Found 4 data files in src 
Processing src/C####.gcda 
    ignoring data for external file /usr/include/c++/4.2.1/bits/allocator.h 
+0

C'est dans 'lcov' 1.10, non? – jackyalcine

+0

A droite, c'est ajouté en 1.10, voir: http://ltp.sourceforge.net/coverage/lcov/changes.php – peetasan

+0

Ouais, ça craint les utilisateurs d'Ubuntu, ce n'est pas encore dans les dépôts de 'raring' ou' saucy'. J'ai utilisé la méthode '--extract' mais cela rendrait la vie beaucoup plus facile. – jackyalcine

Questions connexes