2016-06-07 1 views
3

J'essaye d'exécuter la couverture sur mon projet, après la mise à jour à Ubuntu 16.04. Je reçoisERREUR pendant que le rapport de couverture de code utilisant lcov

Deleted 665 files 
Writing data to coverage.info.cleaned 
lcov: ERROR: cannot write to coverage.info.cleaned! 
CMakeFiles/coverage.dir/build.make:57: recipe for target 'CMakeFiles/coverage' failed 
make[3]: *** [CMakeFiles/coverage] Error 13 
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/coverage.dir/all' failed 
make[2]: *** [CMakeFiles/coverage.dir/all] Error 2 
CMakeFiles/Makefile2:74: recipe for target 'CMakeFiles/coverage.dir/rule' failed 
make[1]: *** [CMakeFiles/coverage.dir/rule] Error 2 
Makefile:129: recipe for target 'coverage' failed 
make: *** [coverage] Error 2 
enter code here 

Avant la mise à jour, j'ai eu aucun problème en cours d'exécution de la couverture

+0

Avez-vous essayé 'make clean'? – Gluttton

+0

Bien sûr, j'ai même re-faire le répertoire de couverture – Ortal

+2

Trouvé le problème, dans mon cas à la fin, j'ai supprimé toutes les sorties inutiles, et les réécrire dans un fichier différent. Après la mise à jour vers 16.04, le nouvel emplacement pour écrire les nouvelles données se trouvait dans le répertoire racine. Il a été corrigé en définissant la nouvelle cible – Ortal

Répondre

3

Est-il utile si vous utilisez chemins absolus au lieu des chemins relatifs lorsque les fichiers en passant à lcov?

J'ai rencontré un problème similaire où lcov n'a pas réussi à écrire le fichier. Je ne sais pas si elle est un bogue dans lcov, mais le problème est qu'il est embrouillé avec des chemins relatifs:

lcov -a test_fast_cxxtest_gcov__base.info -a test_fast_cxxtest_gcov__test.info \ 
    -o test_fast_cxxtest_gcov__total.info 
Combining tracefiles. 
Reading tracefile test_fast_cxxtest_gcov__base.info 
Reading tracefile test_fast_cxxtest_gcov__test.info 
lcov: WARNING: function data mismatch at /home/phil/ghost/constants.h:1862 
Writing data to test_fast_cxxtest_gcov__total.info 
lcov: ERROR: cannot write to test_fast_cxxtest_gcov__total.info! 

fonctionner avec strace a révélé qu'il exécute chdir("/") sur plusieurs endroits, ce qui modifie le répertoire de travail à / . Cela explique pourquoi il ne peut pas écrire le fichier.

Une solution consiste à utiliser des chemins absolus. Par exemple, si vous utilisez GNU make, vous pouvez utiliser la commande abspath:

lcov -a $(abspath test_fast_cxxtest_gcov__base.info) \ 
    -a $(abspath test_fast_cxxtest_gcov__test.info) \ 
    -o $(abspath test_fast_cxxtest_gcov__total.info) 

Après ce changement, il a finalement pu écrire le fichier.

(D'autres options comme essayer de définir les répertoires en utilisant l'option --base-directory ou --directory n'a pas eu d'effet, pour autant que je voyais. La version de lcov que je l'ai testé avec est 1.12.)

Le problème n'est pas limité à Ubuntu, comme je l'ai rencontré sur Arch Linux. Il pourrait s'agir d'une régression introduite en 1.12, donc je l'ai rapporté (voir issue #77630). Lcov ne fait pas partie de GCC, donc mon rapport de bogue original a été fermé, mais j'ai reçu une réponse de la liste de diffusion Lcov. Le problème est déjà résolu dans le commit 632c25. Les utilisateurs de distributions Arch Linux peuvent essayer le dernier instantané avec aur/lcov-git.