Instrumentation du code source

Un article de Wikipédia, l'encyclopédie libre.

En informatique, l'instrumentation du code est une opération consistant à ajouter des instructions machine supplémentaires à un programme informatique sans nécessiter la modification du code source original. Elle est apparentée à l'instrumentation dans les sciences, d'où son nom.

Explication[modifier | modifier le code]

La compilation du code source d'un programme génère un binaire (exécutable, ou code objet) ou bien du bytecode. L'instrumentation intervient avant, durant ou après la compilation pour ajouter des instructions supplémentaires. Les instructions ajoutées sont alors exécutées avec les autres lors de l'exécution du programme.

Utilisation[modifier | modifier le code]

Les instructions ajoutées dépendent du but à atteindre par l'instrumentation.

  • Le profilage de code utilise l'instrumentation de code pour enregistrer les fonctions appelées et le temps passé dans chacune d'elles, afin d'identifier les parties de code à optimiser.
  • Le tissage dans la programmation orientée aspect modifie le binaire généré lors de la compilation en ajoutant des capacités supplémentaires au programme.
  • Déterminer la couverture de code utilise l'instrumentation de code pour enregistrer les instructions exécutées et les chemins empruntés lors de l'exécution.
  • Le logiciel Purify détecte les problèmes dans l'utilisation de la mémoire (fuite de mémoire, déréférencement de pointeur NULL, etc.) dans un programme en l'instrumentant et en ajoutant des vérifications à l'exécution.
  • La récupération de mémoire peut se faire en instrumentant le code qui crée ou manipule des pointeurs.
  • L'exécution symbolique généralise la trace du programme pour trouver toutes les valeurs qui suivront le même chemin dans le programme, en ajoutant une version symbolique de chaque instruction, et en accumulant les contraintes le long du chemin.

Voir aussi[modifier | modifier le code]

  • Apache BCEL, une bibliothèque logicielle permettant de manipuler du bytecode Java pouvant être utilisée pour instrumenter un programme Java.