gcc
Kodstäckning: gcov
Sök…
Anmärkningar
GCC tillhandahåller viss dokumentation av gcov här
Gcovr och Lcov kan användas för att generera och sammanfatta täckningsresultaten
Introduktion
Kodtäckning är ett mått som används för hur ofta varje källkodsats och gren utförs. Denna åtgärd krävs vanligtvis vid körning av en testsvit för att säkerställa att så mycket av koden som möjligt testas av testsviten. Det kan också användas under profilering för att bestämma kod-hotspots och där där optimeringsinsatser kan ha mest effekt.
I GCC tillhandahålls kodtäckning av gcov-verktyget. gcov fungerar endast med kod kompilerad med gcc med speciella flaggor. Det finns väldigt få andra kompilatorer som gcov fungerar alls.
Kompilering
Innan du använder gcov, bör källkoden sammanställas med gcc med hjälp av de två flaggorna, -fprofile-arcs och -ftest-coverage . Detta säger kompilatorn att generera information och extra objektfilkod som krävs av gcov.
gcc -fprofile-arcs -ftest-coverage hello.c
Länka bör också använda -fprofile-arcs .
Generera utgång
För att generera täckningsinformationen bör det sammanställda programmet köras. När du skapar kodtäckning för en testsvit utförs detta utföringssteg vanligtvis av testsviten så att täckningen visar vilka delar av programmet testerna kör och vilka de inte gör.
$ a.out
Om programmet körs kommer en .gcda fil att genereras i samma katalog som objektfilen.
Därefter kan du ringa gcov med programmets källfilnamn som ett argument för att skapa en lista över koden med körfrekvens för varje rad.
$ gcov hello.c
File 'hello.c'
Lines executed:90.00% of 10
Creating 'hello.c.gcov'
Resultatet finns i en .gcov fil. Här är ett exempel:
-: 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:}
Här kan du se radnumren och källan och antalet gånger varje rad utförs. Om en linje inte körs är den markerad med ##### .
Exekveringsräkningarna är kumulativa. Om exempelprogrammet kördes igen utan att ta bort .gcda-filen, skulle antalet gånger varje rad i källan köras läggas till resultaten från föregående körning.