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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow