gcc
Couverture du code: gcov
Recherche…
Remarques
GCC fournit de la documentation sur gcov ici
Gcovr et Lcov peuvent être utilisés pour aider à générer et à résumer les résultats de la couverture
introduction
La couverture de code est une mesure utilisée pour déterminer la fréquence d'exécution de chaque instruction de code source et de chaque branche. Cette mesure est généralement requise lors de l'exécution d'une suite de tests pour s'assurer que la suite de tests teste autant de code que possible. Il peut également être utilisé lors du profilage pour déterminer les points névralgiques du code et donc où les efforts d'optimisation peuvent avoir le plus d'effet.
Dans le code GCC, la couverture est fournie par l'utilitaire gcov. gcov ne fonctionne qu'avec du code compilé avec gcc avec des drapeaux particuliers. Il y a très peu d'autres compilateurs avec lesquels gcov travaille.
Compilation
Avant d'utiliser gcov, le code source doit être compilé avec gcc en utilisant les deux indicateurs, -fprofile-arcs et -ftest-coverage . Cela indique au compilateur de générer les informations et le code de fichier objet supplémentaire requis par gcov.
gcc -fprofile-arcs -ftest-coverage hello.c
La liaison doit également utiliser le drapeau -fprofile-arcs .
Générer une sortie
Pour générer les informations de couverture, le programme compilé doit être exécuté. Lors de la création d'une couverture de code pour une suite de tests, cette étape d'exécution sera normalement effectuée par la suite de tests afin que la couverture indique les parties du programme exécutées par les tests et celles qui ne le sont pas.
$ a.out
L'exécution du programme entraînera la .gcda un fichier .gcda dans le même répertoire que le fichier objet.
Par la suite, vous pouvez appeler gcov avec le nom du fichier source du programme comme argument pour générer une liste du code avec une fréquence d'exécution pour chaque ligne.
$ gcov hello.c
File 'hello.c'
Lines executed:90.00% of 10
Creating 'hello.c.gcov'
Le résultat est contenu dans un fichier .gcov Voici un exemple:
-: 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:}
Vous pouvez voir ici les numéros de ligne et la source et le nombre de fois que chaque ligne est exécutée. Si une ligne ne s'exécute pas, elle est marquée par ##### .
Les comptes d'exécution sont cumulatifs. Si le programme exemple a été exécuté à nouveau sans supprimer le fichier .gcda, le nombre de fois où chaque ligne de la source a été exécutée serait ajouté aux résultats de l'exécution précédente.