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.
Haben Sie versucht "sauber machen"? – Gluttton
Sicher, ich mache sogar das Coverage-Verzeichnis neu – Ortal
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