gcc
Codeabdeckung: gcov
Suche…
Bemerkungen
GCC eine Dokumentation von gcov bieten hier
Gcovr und Lcov können verwendet werden, um die Deckungsergebnisse zu generieren und zusammenzufassen
Einführung
Code Coverage ist ein Maß dafür, wie oft die einzelnen Quelltextanweisungen und Verzweigungen ausgeführt werden. Diese Maßnahme ist normalerweise beim Ausführen einer Testsuite erforderlich, um sicherzustellen, dass so viel Code wie möglich von der Testsuite getestet wird. Es kann auch während der Profilerstellung verwendet werden, um Code-Hot-Spots zu bestimmen und somit, wo Optimierungsanstrengungen die größte Wirkung haben können.
In GCC wird die Codeabdeckung vom Dienstprogramm gcov bereitgestellt. gcov funktioniert nur mit Code, der mit gcc mit bestimmten Flags kompiliert wurde. Es gibt sehr wenige andere Compiler, mit denen gcov überhaupt arbeitet.
Zusammenstellung
Vor der Verwendung von gcov sollte der Quellcode mit den beiden Flags -fprofile-arcs und -ftest-coverage mit gcc kompiliert werden. Dadurch wird der Compiler angewiesen, die von gcov benötigten Informationen und zusätzlichen Objektdateicode zu generieren.
gcc -fprofile-arcs -ftest-coverage hello.c
Die Verknüpfung sollte auch das Flag -fprofile-arcs verwenden.
Ausgabe generieren
Um die Abdeckungsinformationen zu generieren, sollte das kompilierte Programm ausgeführt werden. Beim Erstellen einer Code-Abdeckung für eine Testsuite wird dieser Ausführungsschritt normalerweise von der Testsuite ausgeführt, so dass die Abdeckung zeigt, welche Teile des Programms die Tests ausführen und welche nicht.
$ a.out
Wenn Sie das Programm .gcda wird eine .gcda Datei in demselben Verzeichnis wie die Objektdatei generiert.
Anschließend können Sie gcov mit dem Quelldateinamen des Programms als Argument aufrufen, um eine Auflistung des Codes mit der Ausführungshäufigkeit für jede Zeile zu erstellen.
$ gcov hello.c
File 'hello.c'
Lines executed:90.00% of 10
Creating 'hello.c.gcov'
Das Ergebnis ist in einer .gcov Datei enthalten. Hier ist ein Beispiel:
-: 0:Source:hello.c
-: 0:Graph:hello.gcno
-: 0:Data:hello.gcda
-: 0:Runs:1
-: 0:Programs:1
-: 1:#include <stdio.h>
-: 2:
-: 3:int main (void)
1: 4:{
1: 5: int i;
-: 6:
1: 7: i = 0;
-: 8:
-: 9:
1: 10: if (i != 0)
#####: 11: printf ("Goodbye!\n");
-: 12: else
1: 13: printf ("Hello\n");
1: 14: return 0;
-: 15:}
Hier können Sie die Zeilennummern und die Quelle sowie die Anzahl der ausgeführten Zeilen sehen. Wenn eine Zeile nicht ausgeführt wurde, ist sie mit ##### .
Die Ausführungszahlen sind kumulativ. Wenn das Beispielprogramm erneut ausgeführt wurde, ohne die .gcda-Datei zu entfernen, wird die Anzahl der Male, die jede Zeile in der Quelle ausgeführt wurde, zu den Ergebnissen des vorherigen Laufs addiert.