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 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 ; les instructions sont donc considérées comme un seul groupe.
Les blocs de base s'achèvent avec des instructions comme branch, call, throw et return.
Certaines instructions, telles que divide, ne sont pas considérées comme marquant le fin d'une unité exécutable, même si elles peuvent lancer une exception. C'est notamment en cela qu'une unité exécutable se distingue d'un bloc de base sur le plan technique.
Si aucune information source n'est associée à une méthode Java, on considère que celle-ci possède une seule unité exécutable.