Le fragment de sonde executableUnit permet d'effectuer une collecte de données à granularité fine pour les méthodes respectant la spécification de filtre et de cible de la sonde et qui disposent d'informations sur le code source.
Un appel à ce type de fragment est inséré avant chaque "unité exécutable" dans la méthode cible. Pour les méthodes respectant la spécification de filtre et de cible de la sonde mais ne possédant pas d'informations sur le code source, le fragment est inséré une seule fois au début de la méthode.
Les fragments executableUnit peuvent employer tous les types de données, excepté returnedObject, exceptionObject, isFinally et thisObject. Plus important encore, ils peuvent utiliser l'élément de données executableUnitNumber qui contient le numéro de l'unité exécutable sur le point de s'exécuter.
Le nombre d'unités exécutables dans une méthode et dans les tableaux de lignes n'inclut pas celles insérées dans la méthode par Probekit.
Une unité d'exécution commence au début de chaque bloc de base et à chaque bytecode dont le numéro de ligne source est différent du précédent bytecode. Un bloc de base est une région d'instructions de bytecode qu'il est impossible de faire diverger vers l'intérieur et l'extérieur. Lorsque la première instruction d'un bloc de base s'exécute, toutes les autres sont également exécutées car elles sont prises comme groupe solidaire.
Les blocs de base s'achèvent avec les instructions branch, call, throw et return, entre autres.
Certaines instructions, telles que "divide", ne sont pas considérées comme marquant la fin d'une unité exécutable, même si elles peuvent lancer une exception. En cela une unité exécutable se distingue également d'un bloc de base sur le plan technique.
Si aucune information source n'est associée à une méthode Java, il est considéré que celle-ci possède une seule unité exécutable.
Rubrique parent :
Référence Probekit
Référence associée
Objet de sonde Fragment
Objet de sonde Data
Informations connexes
Exemple ExecutableUnit