2016-07-20 27 views
0

Ich kann gcov richtig benutzen (zumindest denke ich, dass ich es bin), aber in einigen meiner Verzeichnisse kann ich keine Coverage für einige der Header-Dateien ausgeben. Zum Beispiel zeigt myfile.cpp Abdeckung aber myfile.h (oder myfile.hpp) nicht. Jede Hilfe würde sehr geschätzt werden.lcov/gcov gibt keine Coverage für Header-Dateien aus

+1

Enthält Ihre Kopfzeile Funktionsdefinition? Oder nur Deklaration? – Gluttton

+0

Hat mehrere Funktionsdefinitionen. Ich denke, ich habe einen Teil des Problems herausgefunden. Einige der .gcno-Dateien wurden nicht erstellt. Ich bekomme eine Fehlermeldung, dass ich das unerwartete Ende der Datei erreicht habe. Ich ging durch und entfernte eine .gcno-Datei (und die .gcda-Datei), kompilierte neu, führte lcov aus und wiederholte dann für jede Datei, die das unerwartete Ende der Datei hatte. – bsquared82

+0

Jetzt ist mein Problem, dass es einen Timestamp Mismatch in den .gcda-Dateien gibt, da ich die Dateien neu kompilieren musste, die über ein unerwartetes Ende der Dateien verfügten. Meine Frage ist, ob ich die .gcda Timestamps neu kompilieren und synchronisieren kann, wenn ich das tun muss? – bsquared82

Antwort

0

Das Zeitstempelproblem ist einfach, weil Sie dieselbe Quelle verwenden, um mehrere Ausgaben zu erstellen. Zum Beispiel erstellt Ihr Makefile die Debug-Objekte und erstellt dann die optimierten Objekte. Oder Sie verwenden dieselbe Quelle, um statische und dynamische Bibliotheken zu erstellen. Oder kompilieren Sie thing.c, um eine .o zu erstellen, die zu Ihrem statischen Archiv hinzugefügt werden kann, aber auch thing.c mit -DMAKE_MAIN zu kompilieren, um das Testprogramm zu erstellen.

In jedem Fall werden die GCOV-Notes-Dateien (.gcno) bei jedem Kompilieren der Quelle ersetzt. Wenn Sie jetzt die Codeanalyse ausführen, ist die Datei neuer als die ausführbare Datei, daher erhalten Sie den Zeitstempelfehler.