Rim Chaabane. Analyse dynamique de ... - Université Paris 8
Rim Chaabane. Analyse dynamique de ... - Université Paris 8
Rim Chaabane. Analyse dynamique de ... - Université Paris 8
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Chapitre 5 - Description technique du travail réalisé<br />
L instruction switch évalue l expression InSt[p].opco<strong>de</strong>, qui correspond au co<strong>de</strong> opérateur<br />
<strong>de</strong> l instruction <strong>de</strong> numéro d enregistrement p. Si le co<strong>de</strong> opérateur est stoint alors la fonction<br />
stoTYPE(ival) est exécutée, et ainsi <strong>de</strong> suite pour tous les co<strong>de</strong>s opérateurs définis. Ces co<strong>de</strong>s<br />
opérateurs, ci-<strong>de</strong>ssus, nous permettent <strong>de</strong> détecter lorsqu une variable entière est définie<br />
(stoint), et pour détecter lorsqu une variable entière est utilisée (rvalint). L objectif <strong>de</strong> notre<br />
outil étant d extraire les informations sur la définition et l utilisation <strong>de</strong>s variables 14 , nous <strong>de</strong>vons<br />
principalement modifier la trace dans pour qu elle intègre ces informations. Par exemple pour le<br />
programme <strong>de</strong> la figure 19, nous voulons obtenir une trace <strong>de</strong> la forme :<br />
5,<br />
[main]<br />
9-<br />
Def x 12 9<br />
10-<br />
Use x 9 10<br />
x = 12<br />
11-<br />
return 0<br />
[::EiC::]<br />
Ce format nous permet ainsi <strong>de</strong> capturer l usage <strong>de</strong>s variables effectué par chaque instruction <strong>de</strong><br />
notre exemple :<br />
- en ligne 9 on définit la variable x avec la valeur 12 (Def x 12 9)<br />
- en ligne 10 on utilise la variable x définie en ligne 9 (Use x 9 10), le résultat <strong>de</strong><br />
l instruction est affiché ensuite<br />
- en ligne 11 on utilise la fonction return avec pour valeur <strong>de</strong> retour 0<br />
Pour obtenir le format <strong>de</strong> base <strong>de</strong> données avec les lignes Use et Def, nous avons modifié le co<strong>de</strong><br />
exécutépour le co<strong>de</strong> opérateur stoint pour afficher une ligne <strong>de</strong> type Def. Par contre si c est<br />
rvalint, alors nous affichons dans une ligne <strong>de</strong> type Use. Nous pouvons voir dans l extrait <strong>de</strong><br />
co<strong>de</strong> source suivant comment cela a été introduit dans la boucle d évaluation d instructions :<br />
switch (InSt[p].opco<strong>de</strong>) {<br />
case stoint:<br />
stoTYPE(ival);<br />
printf("\tDef %d-%d %d %d \n",<br />
InSt[p].ext,<br />
InSt[p].val.ival,<br />
AR[InSt[p].ext][InSt[p].val.ival].v.ival,<br />
InSt[p].line);<br />
break;<br />
case rvalint:<br />
rvalTYPE(ival);<br />
printf("\tUse %d-%d %d %d \n",<br />
InSt[p].ext,<br />
InSt[p].val.ival,<br />
lastcalline,<br />
InSt[p].line);<br />
break;<br />
}<br />
Une ligne <strong>de</strong> format Def contient trois informations : l i<strong>de</strong>ntifiant <strong>de</strong> la variable, la valeur <strong>de</strong> la<br />
variable et le numéro <strong>de</strong> ligne <strong>de</strong> l instruction C effectuant cette affectation. Une ligne <strong>de</strong> format<br />
Use contient également trois informations : l i<strong>de</strong>ntifiant <strong>de</strong> la variable, le numéro <strong>de</strong> ligne <strong>de</strong><br />
l instruction C et enfin la <strong>de</strong>rnière ligne où la variable à été modifiée. La <strong>de</strong>rnière ligne où la<br />
14<br />
Pour simplifier l exposé, nous nous concentrons ici sur l usage <strong>de</strong>s variables, le cas <strong>de</strong>s appels <strong>de</strong> fonctions est<br />
détaillé en section 5.14.<br />
49