gcov bei größeren Projekten (statische Bibliotheken, ...)
Arbeite ich an größeren Projekt, das Folgendes Verzeichnis-layout:
Source
MyA
aa.cpp
ab.cpp
ac.cpp
MyB
ba.cpp
bb.cpp
bc.cpp
MyTest
testaa.cpp
testab.cpp
testac.cpp
testba.cpp
testbb.cpp
testbc.cpp
main.cpp
Build
MyA
aa.o
ab.o
ac.o
libMyA.a (static library)
MyB
ba.o
bb.o
bc.o
libMyB.a (static library)
MyTest
testaa.o
testab.o
testac.o
testba.o
testbb.o
testbc.o
MyTest (executable)
Nach dem kompilieren mit -fprofile-arcs -ftest-coverage
führe ich die MyTest-Anwendung in der Bau - /MyTest-Verzeichnis. Wie erwartet gibt es hier *.gcno und *.gcda Dateien im Build-Verzeichnis. Nach dem ausführen gcov innerhalb der MyTest anderen Verzeichnis *.gcov-Dateien produziert, aber leider nicht für alles, was im inneren MyA und MyB, obwohl jede Funktion wird aufgerufen, innerhalb dieser zwei Bibliotheken. Versucht, verschiedene Optionen, aber irgendwie bin ich nicht in der Lage, sinnvolle (korrekte) *.gcov-Dateien mit diesem layout.
Wenn ich Kopie jedes cpp in einem Verzeichnis und wiederholen Sie die Schritte, alles funktioniert wie erwartet und die coverage-Analyse ist perfekt.
InformationsquelleAutor azraiyl | 2011-04-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie angeben, source-Dateien absolute Pfade zu g++/gcc. Nicht verwenden relative Pfade mit ".." oder wie "foo/bar.cpp", ansonsten erhalten Sie Fehler wie "geninfo: WARNUNG: keine Daten gefunden für XXXX".
Nicht alle header-Dateien auf der Kommandozeile g++/gcc. Sonst bekommst du "stamp mismatch mit graph-Datei" - Fehler.
So, Folgendes sollte funktionieren, wenn wir mehrere Verzeichnisse:
Oder, wenn Sie in einer make-Datei verwendet relative Pfade schon, es ist bequem zu bedienen:
lcov
vor.InformationsquelleAutor Lasse Reinhold
Werden in der Lage, halten Sie Ihre Verzeichnis-Struktur, die Sie benötigen, um ausführen gcov einmal in jeder source-Datei-Ordner, aber verwenden Sie die
-o
option zu sagen, gcov, wo die Daten-Dateien sind.Ich denke, es sollte wie folgt sein:
Habe ich ein Projekt mit einem ähnlichen source-Datei-Struktur, aber ich lass den compiler-dump-object-Dateien etc. in den source-Ordner. Ich dann gcov mehrfach aus dem root-Ordner, einmal für jede Quelldatei, aber ich geben Sie den relativen Pfad der Quell-Datei und verwenden Sie die
-o
- option, um den relativen Ordner wie diesem:Ich bin mit scons um das Projekt zu erstellen, also ich bin mir nicht ganz sicher, aber ich denke ja, scons verwendet relative Pfade zu den Quelldateien.
InformationsquelleAutor quamrana
Wenn Sie durchgeführt Ihr Produkt oder Ihre Anwendung getestet und manuell und verbrachte viel Mühe auf. Wenn Ihr Ziel ist es, die code-coverage-Bericht mithilfe von lcov und gcov aber versehentlich gelöscht gcno-Dateien. Sie regenerieren kann gcno-Dateien, die durch kompilieren der code, aber es erzeugt mit den neuen timestamp und gcov den Fehler zu sagen "stamp mismatch mit graph-Datei" und keine code coverage report generiert werden. Dies wird dazu führen, dass alle Ihre Prüfung Aufwand immer verschwendet.
Gibt es einen shortcut zu erzeugen noch die code-coverage-Bericht. Dies ist nur ein workaround und sollte sich nicht darauf verlassen, die ganze Zeit. Des seinen empfohlen zu bewahren *.gcno-Dateien, bis der Test abgeschlossen ist.
Notieren Sie Ihre gcc-version(gcc -v) und laden Sie den Quellcode von einem der mirror-sites
ZB - ftp://gd.tuwien.ac.at/gnu/sourceware/gcc/releases/gcc-4.4.6/gcc-4.4.6.tar.bz2
Nach dem entpacken heruntergeladene Datei, gcc die Ordner-Struktur wie folgt
gcc-4.4.6
gcc-4.4.6/gcc
Wenn Sie direkt gehen in die gcc-4.4.6/gcc und versuchen, es zu tun ./konfigurieren und kompilieren(make) von dort dann begegnen Sie unten problem
bauen/genmodes -h - > tmp-modes.h
/bin/sh: bauen/genmodes: Keine solche Datei oder Verzeichnis
Lösung ist do ./konfigurieren und machen Sie von gcc-4.4.6 und keine Fehler angezeigt werden, bezogen auf genmodes. Dies kompiliert alle Module, einschließlich gcc. Sie müssen möglicherweise installieren Sie mpfr und gmp-Module, die erforderlich sind, gcc, wenn ein Fehler angezeigt ./konfigurieren
springen gcc-4.4.6/gcc/gcov.c-und Kommentar-Zeilen und anschließend neu kompilieren mit oben genannten Befehl
Beispiel Pfad des neuen gcov-binary nach der Kompilierung von gcc-4.4.6/host-x86_64-unknown-linux-gnu/gcc/gcov
Stelle das binary in /usr/bin und regenerieren die code-coverage-Berichts mit dem Befehl, wie dargestellt im unten stehenden Beispiel
lcov --capture --directory ./--output-file coverage.info ; genhtml coverage.info --output-directory /var/www/html/Abdeckung
Nun sollten Sie nicht bekommen "stamp mismatch mit graph-Datei" - Fehler, und Sie erhalten die code-coverage-Bericht richtig
InformationsquelleAutor Shadaksharayya H A