1

yEp,
j'essaye d'utiliser gcov, mais j'ai qqs petits problèmes:
""xxxTest.gcno:cannot open graph file

Est ce que qqn a deja eu cette erreur?

merci

2

Bon il semblerait qu'il faille préciser les fichiers .o.
Sinon j'ai maintenant un beau fichier, qqn connait un logiciel pour en faire une page internet?

3

Bon j'ai un pb, mais apparemment peu de monde fait de la couverture de code. sad
Bon je pose quand même:
gcov & lcov ont tendance a vouloir aller un peu trop loin dans la couverture de code: ie, ils vont chercher tous les includes d'une class. Franchement je m'en fou je souhaite étudier le code coverage de cette classe et pas de ces dépendances...

Qqn a une idée?

4

JackosKing (./3) :
Bon j'ai un pb, mais apparemment peu de monde fait de la couverture de code. frown.gif

Si, mais j'ai jamais eu ton erreur. smile
JackosKing (./3) :
gcov & lcov ont tendance a vouloir aller un peu trop loin dans la couverture de code: ie, ils vont chercher tous les includes d'une class. Franchement je m'en fou je souhaite étudier le code coverage de cette classe et pas de ces dépendances...

C'est trop long à calculer ? chez moi c'est instantanée, donc je me suis jamais posé la question de comment éviter qu'il génère les analyses des headers.

5

Disons que c'est le bordel (pas le miens, mais j'en "hérite"...). Ils ont un max de dépendances dans tous les sens, et ca à pas l'air de les géner (si c'est cyclique c'est encore meilleur!).
Je pense que je vais abandonner lcov, une bonne partie des pb viennent de lui qui arrive pas a retrouver tous les fichiers sources (eparpillés dans une hierarchie alléatoire sans regle apparemment)etc... -> script shell pour faire ma page HTML et tout le bordel.

Dur dur de bosser dans ces circonstances!


6

Bon de retour avec Gcov.
Question 1:
Est il normal que dans les fonctions inline il me mette un -: et non n: (en gros c'est inline -> non unicite du symbole etc...). Je pense que c'est normal mais je demande confirmation quand meme.
Question 2:
Comment utilise t'on gcov?
je me pose sincerement cette question parce que les resultats obtenus sont pas satisfaisant.
J'ai la hierachie suivante:

...../ProjectA/componentA/*.*pp
...../ProjectA/componentB/*.*pp

...../testA/testcomponentA/*.*pp
...../testA/testcomponentB/*.*pp
...../testA/Testsuite.cpp
...../testA/Makefile

la compilation se fait avec le Makefile et me sort un ./Testsuite.
les objets sont dans:
...../obj/ProjectA/componentA/*.o
...../obj/ProjectA/componentB/*.o

...../obj/testA/testcomponentA/*.o
...../obj/testA/testcomponentB/*.o
...../obj/testA/Testsuite

Je lance ..../testA/Testsuite dans le repertoire ou j ai fait make
et je lance: gcov *.*pp ...../ProjectA/*/*.*pp ...../testA/testcomponentA/*.*pp -o ...../obj/ProjectA/*/*.o ...../obj/testA/*.o ...../obj/testA/*/*.o
Il essaye de me faire la couverture de la stl etc (iostream.gcov).
En revanche il me fait pas la couverture de /ProjectA/*/*.*hpp

Comment faire la chose proprement pour avoir tous les gcov que je veux?
De plus, faut il forcer le compilateur (gcc mode c++) a ne pas inliner et a mettre le code dans les .o (est-ce possible)?

7

JackosKing (./6) :
Est il normal que dans les fonctions inline il me mette un -: et non n: (en gros c'est inline -> non unicite du symbole etc...). Je pense que c'est normal mais je demande confirmation quand meme.

Il vaut mieux désactiver l'inline et les optimisations en mode coverage.
JackosKing (./6) :
et je lance: gcov *.*pp ...../ProjectA/*/*.*pp ...../testA/testcomponentA/*.*pp -o ...../obj/ProjectA/*/*.o ...../obj/testA/*.o ...../obj/testA/*/*.o

Essaye de le lancer sur chaque fichier séparément (un fichier .*pp et son fichier objet en même temps).

8

Bon en effet cela marche mieux si l'on appelle gcov sur chaque fichier source, mais c'est super long et il doit faire plusieur fois le meme boulot.
J'ai toujours le probleme de fichier gcov generer pour la stl etc.
De plus j ai remarque que les fichiers gcov avaient des choses comme cela:
function _Z41__static_initialization_and_destruction_0ii called 5 returned 100% blocks executed 84%
        5:   16:}
function _GLOBAL__I__ZN78_GLOBAL__N_.._.._.._src_maclass.cpp_17E02520_7435091E9__trcinitE called 5 returned 100% blocks executed 100%
       10:   17:/*EOF*/
function _GLOBAL__D__ZN78_GLOBAL__N_.._.._.._src_maclass.cpp_17E02520_7435091E9__trcinitE called 0 returned 0% blocks executed 0%


je pense que ce sont des choses que le compilateur c++ a généré tout seul, mais comment savoir ce que c'est?

Une autre question est maintenant que j'ai un code coverage correcte (a part les getter setter inline), je voudrais avoir une complexite cyclomatique.
Est il possible de l'avoir directement avec un outils standard qui est installe avec gcc (comme gcov par exemple), ou qui s'installe super simplementwink
Sinon je pense m'en faire un en approximant les chemins avec les noeuds (trouver les case, && etc...) enfin si c'est aussi simple (j'en doute).

9

!call Kevin Koffler
--- Call : Kevin Koffler n'existe pas !
pour les symboles c++.
(oui je suis flemmard, mais c'est vendredi soirwink)

10

c++filt
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité