Spécifications de cible de sonde

Une spécification de cible indique les classes et les méthodes auxquelles la sonde doit être appliquée.

La spécification de cible est optionnelle. Si aucune cible n'est spécifiée, la sonde s'applique à toutes les classes traitées par le moteur d'instrumentation.

Les spécifications de cible vous permettent de créer des règles de filtre afin d'inclure ou d'exclure des méthodes de l'instrumentation basée sur des motifs qui sont comparés au nom de package, classe et méthode, ainsi qu'à la signature de la méthode. Les motifs peuvent comporter des caractères génériques, "*" correspondant à zéro ou plusieurs caractères.

Si les masques génériques d'un objet cible correspondent au package, à la classe, au nom et à la signature de la méthode, la propriété type détermine si cette méthode est instrumentée (include) ou non (exclude). Si les motifs ne correspondent pas au package, à la classe, au nom et à la signature d'une méthode, celle-ci est par défaut instrumentée.

La cible inclut les propriétés suivantes :
Propriété Description
type Obligatoire. La propriété type détermine si une sonde est ou non appliquée à une méthode cible. Entrez include pour appliquer la sonde aux classes et méthodes correspondant aux masques génériques, ou exclude pour les exclure.
package Facultatif. Indiquez un masque générique à comparer avec la partie du package des noms de classes.Par exemple : java.util* correspond à toutes les classes du package java.util, et de ses sous-modules. Sans indication particulière, la valeur par défaut est *.
className Facultatif. Indiquez un masque générique à comparer avec les noms de classes. Sans indication particulière, la valeur par défaut est *.
method Facultatif. Indiquez un masque générique à comparer avec les noms de méthodes. Sans indication particulière, la valeur par défaut est *.
signature Facultatif. Indiquez un masque générique à comparer avec la signature de méthode. (La signature est la chaîne représentant les arguments et le type de retour de la méthode.) Utilisez le format Java interne pour les signatures de méthode. Par exemple : (Ljava/lang/Object;)D est la signature d'une méthode qui prend un objet comme paramètre et renvoie un double. Le masque générique peut servir à distinguer plusieurs méthodes surchargées. Sans indication particulière, la valeur par défaut est *.

Remarques :

  • Une sonde peut comporter plusieurs spécifications de cible contenant une série de règles de ciblage. Pour limiter l'application d'une sonde à certaines méthodes, spécifiez d'abord les méthodes que vous voulez inclure, puis ajoutez une spécification de cible finale package=* className=* method=* signature=* type=exclude.
  • Les noms de packages et de classe que vous spécifiez sont également comparés aux noms de packages et de classe de toute interface implémentée par une classe. Par exemple, java.util.HashMap implémente l'interface java.util.Map. Si une sonde cible le package java.util, le nom de classe Map et le nom de méthode size, il sera appliqué à java.util.HashMap.size() et à la méthode size de toute classe implémentant l'interface Map.
  • La concordance des motifs ne prend pas en compte les relations d'héritage. Si la classe Derived étend la classe Base et si une sonde cible Base.run(), celle-ci ne s'appliquera pas automatiquement à Derived.run().
  • Si le motif du package dans une spécification de cible se limite à un point ("."), il représente le package Java global sans nom. Vous pouvez ainsi cibler des classes dans ce package.
  • Les sondes de site d'appel comparent des motifs et des règles de ciblage au package, à la classe, au nom et à la signature d'une méthode appelée. La concordance est effectuée par rapport à la méthode appelée et connue au moment de la génération, à savoir les noms de classe et de méthode connus de façon statistique et non les méthodes réelles qui seront appelées en raison des fonctions d'héritage et virtuelles. Si l'appel est réalisé via une interférence d'interface, le nom de celle-ci doit correspondre.
Exemple :

Pour spécifier une cible, sélectionner Cible dans le panneau d'arborescence de la page Sondes, et cliquez sur Ajouter, puis Editer dans le panneau d'édition.

Cet exemple n'applique la sonde qu'aux méthodes dont le nom commence par Get, dans les classes dont le nom se termine par Proxy, dans le package com.example. Entrées cibles de type "inclure" et "exclure" ; l'entrée cible exclure utilise l'astérisque pour tout exclure ; l'entrée inclure spécifie exactement les méthodes à cibler. Toutes les autres classes et méthodes sont exclues de l'instrumentation.