19.06.2014 Views

Rim Chaabane. Analyse dynamique de ... - Université Paris 8

Rim Chaabane. Analyse dynamique de ... - Université Paris 8

Rim Chaabane. Analyse dynamique de ... - Université Paris 8

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Chapitre 7 - Comparaison avec l existant<br />

#inclu<strong>de</strong> <br />

class A {<br />

public:<br />

void a();<br />

void b();<br />

void c();<br />

};<br />

void A::a(){b();}<br />

void A::b(){}<br />

void A::c(){}<br />

int main()<br />

{A t;<br />

t.a();<br />

t.c();<br />

exit(0);}<br />

Figure 34. Graphe <strong>de</strong> dépendance <strong>de</strong>s fonctions du fichier "test.cpp" à gauche <strong>de</strong> la figure<br />

Nous pouvons voir dans cet exemple, que la fonction main fait appel à trois fonctions. La<br />

première fonction a() est définie dans la classe A et fait appel à la fonction b() qui est est<br />

définie dans cette classe. La <strong>de</strong>uxième fonction c() est également définie dans A et la troisième<br />

est la fonction exit(0). Sur le graphe généré <strong>dynamique</strong>ment, on peut voir <strong>de</strong>s liens <strong>de</strong> la<br />

fonction main vers les <strong>de</strong>ux fonctions <strong>de</strong> classe A, avec le lien représentant l appel <strong>de</strong> la fonction<br />

a() à la fonction b() et enfin un lien <strong>de</strong> la fonction main vers la fonction exit. Nous n avons<br />

donc aucune représentation sur la valeur passée en argument à la fonction exit, contrairement à<br />

notre outil qui permet <strong>de</strong> retourner ces valeurs graphiquement.<br />

L appel à Gprof permet <strong>de</strong> consulter le contenu du fichier <strong>de</strong> données généré, <strong>de</strong>s options<br />

d appel à cet outil permettent <strong>de</strong> filtrer les données qu on veut consulter (par exemple choisir <strong>de</strong><br />

ne pas représenter certaines fonctions). Le fichier <strong>de</strong> données doit ensuite être manipulé par<br />

d autres outils pour le mettre sous un format spécifique lisible par VCG. Il n y a, <strong>de</strong> plus, aucune<br />

automatisation <strong>de</strong> cette génération <strong>de</strong> graphes.<br />

Donc cet outil, tout comme le nôtre, permet d obtenir une visualisation <strong>de</strong> données extraites <strong>de</strong><br />

manière <strong>dynamique</strong> d un co<strong>de</strong> source. L avantage que présente Call Graph est que toutes les<br />

spécificités du C sont prises en compte étant donné que le compilateur gcc est utilisé. Cependant,<br />

les informations extraites ne concernent que les dépendances entre fonctions, ce qui ne donne au<br />

développeur qu une partie <strong>de</strong> l information manipulée par un programme. Notre programme<br />

permet non seulement <strong>de</strong> générer un plus grand nombre d informations d un co<strong>de</strong> source exécuté<br />

mais se base sur un interprète, portable sur un grand nombre <strong>de</strong> systèmes. Il offre également une<br />

génération automatique <strong>de</strong>s graphes <strong>de</strong> dépendances.<br />

7.2. Zeugma : représentation métaphorique <strong>de</strong><br />

programmes<br />

L outil Zeugma [PLO 02], développé par D. Ploix en Intelligence Artificielle, porte sur la<br />

représentation analogique <strong>de</strong> programmes en Vlisp. Il est basé sur <strong>de</strong>s liens métaphoriques entre<br />

les objets manipulés <strong>dynamique</strong>ment par un programme et <strong>de</strong>s domaines <strong>de</strong> représentations dans<br />

<strong>de</strong>s villes ou encore <strong>de</strong>s comportements d animaux lors <strong>de</strong> l exécution du programme, ces liens<br />

sont activés pour ainsi construire une représentation métaphorique du programme.<br />

71

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!