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.
Avez-vous essayé 'make clean'? – Gluttton
Bien sûr, j'ai même re-faire le répertoire de couverture – Ortal
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