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 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

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

Saved successfully!

Ooh no, something went wrong!