Instrumentation du code source

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

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. Toutefois, cette instrumentation introduit un surcoût d'exécution (« overhead »), dont l'importance varie significativement selon la méthode utilisée et le cadre d'observabilité choisi[1].

Utilisation

modifier

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.

Références

modifier
  1. Reichelt, D. G., Bulej, L., Jung, R., & van Hoorn, A. (2024, May). Overhead Comparison of Instrumentation Frameworks. In Companion of the 15th ACM/SPEC International Conference on Performance Engineering (pp. 249-256).

Voir aussi

modifier
  • Apache BCEL, une bibliothèque logicielle permettant de manipuler du bytecode Java pouvant être utilisée pour instrumenter un programme Java.
  • AspectJ, une extension du langage Java qui permet une programmation orientée aspect (AOP), facilitant l'instrumentation de code via des mécanismes d'injection (join points, pointcuts) lors de la compilation ou du chargement de la classe.