2016-06-07 7 views
3

Ich versuche, Berichterstattung über mein Projekt, nach der Aktualisierung auf Ubuntu 16.04. ichFehler während Code-Coverage-Bericht mit 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 

Vor dem Update ich kein Problem hatte die Abdeckung laufen

+0

Haben Sie versucht "sauber machen"? – Gluttton

+0

Sicher, ich mache sogar das Coverage-Verzeichnis neu – Ortal

+2

Das Problem gefunden, in meinem Fall am Ende habe ich alle unnötigen Ausgaben entfernt, und schreibe sie in eine andere Datei. Nach der Aktualisierung auf 16.04 befand sich der neue Speicherort für die neuen Daten im Stammverzeichnis. Es wurde behoben, indem das neue Ziel gesetzt wurde – Ortal

Antwort

3

es, wenn Sie absolute Pfade anstelle von relativen Pfaden verwenden Hilft, wenn Dateien auf lcov vorbei?

Ich stieß auf ein ähnliches Problem, wo lcov auch fehlschlug, die Datei zu schreiben. Nicht sicher, ob es ein Fehler in lcov ist, aber das Problem war, dass es mit relativen Pfaden verwechselt wurde:

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! 

es mit strace Rennen zeigten, dass es chdir("/") an verschiedenen Standorten durchführt, welche das Arbeitsverzeichnis zu / ändert . Das erklärt, warum es die Datei nicht schreiben kann.

Eine Problemumgehung besteht darin, absolute Pfade zu verwenden. wenn Sie GNU make Zum Beispiel verwenden, können Sie den abspath Befehl verwenden:

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) 

Nach dieser Änderung war es endlich in der Lage, die Datei zu schreiben.

(Andere Optionen wie der Versuch, die Verzeichnisse, um die --base-directory oder --directory Option keine Wirkung hat, soweit ich gesehen habe. Die Version von lcov, die ich mit 1.12 ist getestet.)

Das Problem ist nicht auf Ubuntu beschränkt, da ich auf Arch Linux darauf gestoßen bin. Es könnte jedoch eine Regression in 1.12 eingeführt werden, also meldete ich sie (siehe issue #77630).

Update: Lcov ist nicht Teil von GCC, also wurde mein ursprünglicher Fehlerbericht geschlossen, aber ich bekam eine Antwort von der Lcov-Mailingliste. Das Problem wurde bereits im Commit 632c25 behoben. Benutzer von Arch Linux-basierten Distributionen können den neuesten Snapshot mit aur/lcov-git ausprobieren.