gcc
Codedekking: gcov
Zoeken…
Opmerkingen
GCC bieden enige documentatie van gcov hier
Gcovr en Lcov kunnen worden gebruikt om de dekkingsresultaten te genereren en samen te vatten
Invoering
Codedekking is een maatstaf die wordt gebruikt om te bepalen hoe vaak elke broncode-instructie en tak wordt uitgevoerd. Deze maatregel is meestal vereist bij het uitvoeren van een testsuite om ervoor te zorgen dat zoveel mogelijk van de code door de testsuite wordt getest. Het kan ook worden gebruikt tijdens profilering om hotspots van codes te bepalen en dus waar optimalisatie-inspanningen het meeste effect kunnen hebben.
In GCC wordt codedekking geboden door het hulpprogramma gcov. gcov werkt alleen met code die is samengesteld met gcc met bepaalde vlaggen. Er zijn maar heel weinig andere compilers waarmee gcov werkt.
Compilatie
Voordat u gcov gebruikt, moet de broncode worden gecompileerd met gcc met behulp van de twee vlaggen, -fprofile-arcs en -ftest-coverage . Dit vertelt de compiler om de informatie en extra objectbestandscode te genereren die vereist is door gcov.
gcc -fprofile-arcs -ftest-coverage hello.c
Linking moet ook de vlag -fprofile-arcs .
Genereer output
Om de dekkingsinformatie te genereren, moet het gecompileerde programma worden uitgevoerd. Bij het creëren van codedekking voor een testpakket zal deze uitvoeringsstap normaal worden uitgevoerd door de testreeks zodat de dekking laat zien welke delen van het programma de tests uitvoeren en welke niet.
$ a.out
Als het programma wordt uitgevoerd, wordt een .gcda bestand gegenereerd in dezelfde map als het objectbestand.
Vervolgens kunt u gcov aanroepen met de bronbestandsnaam van het programma als argument om een lijst van de code te produceren met de uitvoeringsfrequentie voor elke regel.
$ gcov hello.c
File 'hello.c'
Lines executed:90.00% of 10
Creating 'hello.c.gcov'
Het resultaat bevindt zich in een .gcov bestand. Hier is een voorbeeld:
-: 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 ziet u de regelnummers en bron en het aantal keren dat elke regel is uitgevoerd. Als een regel niet is uitgevoerd, wordt deze gemarkeerd met ##### .
De uitvoeringstellingen zijn cumulatief. Als het voorbeeldprogramma opnieuw zou worden uitgevoerd zonder het .gcda-bestand te verwijderen, zou de telling voor het aantal keren dat elke regel in de bron werd uitgevoerd, worden toegevoegd aan de resultaten van de vorige run.