2010-06-09 5 views
10

Wenn ich gcov foo.cpp laufen lasse, erzeugt es nicht nur den Code-Coverage-Bericht für foo.cpp, sondern für alle von foo.cpp verwendeten STL-Header.Warum erstellt GCOV Code Coverage-Daten für STL-Header?

Gibt es eine Möglichkeit, dies zu verhindern? Es scheint zu ignorieren Standard Bibliothek Header wie <ctime>.

bearbeiten

Nur über diesen Beitrag auf der gcc-Mailingliste lief:

Re: gcc, gcov and STL

+0

Ja, 100% der Abdeckung zu erreichen scheint eine kolossale Aufgabe, ich bezweifle, sogar STL Entwickler haben eine Testsuite mit 100% Abdeckung ^^. Diese Frage ist in der Tat sehr nützlich – GameDeveloper

Antwort

3

Jede C++ Header-Dateien mit Inline-Code Abdeckung Instrumentierung erhalten, wenn Sie kompilieren und die Ergebnisse werden sichtbar mit gcov. Ein nützliches Flag ist 'gcov -long-file-names' (oder nur -l), das eine eindeutige .gcov-Ausgabedatei für jeden von einer gegebenen Datei enthaltenen Header erzeugt. Die Dateien haben Namen wie 'foo.cpp ## bar.h.gcov'. Dies würde es Ihnen leicht machen, danach mit 'rm * \ # \ # *. Gcov' zu löschen (Vorsicht mit diesen Backslashes!)

Eine andere Möglichkeit, diese Dateien zu finden, besteht darin, nach den Zeilen mit der Nummer 0 zu suchen gcov-Ausgabe. Diese haben Informationen einschließlich "Quelle:" mit dem vollständigen Pfad zur ursprünglichen Quelldatei markiert.

+0

Vielleicht hatten Sie eine alte Version, ich sehe keine Datei mit einem doppelten # -Zeichen in meinen Ergebnissen. Es gibt jedoch Binärdateien mit .gcno, und diese entsprechen diesen Dateinamen (Sie können sie mit Zeichenfolgen für diese Binärdateien anzeigen.) –

+0

Großartig! Das '-l' löste viele Probleme mit Inline- und Template-Funktionen. –

7

-r --relative-only

Nur Ausgabe Informationen über Quelldateien mit einem relativen Pfadnamen (nach Quelle Präfix elision). Absolute Pfade sind normalerweise System-Header-Dateien, und die Abdeckung von darin enthaltenen Inline-Funktionen ist normalerweise uninteressant.

+0

danke. im Grunde würde das Dinge ignorieren, die mit '#include

' enthalten sind und nur Sachen verfolgen, die in' #include "Myheader" enthalten sind. Die einfachste Lösung, um die STL-Abdeckung loszuwerden ^^ – GameDeveloper