Especificaciones de destino de sonda

Una especificación de destino indica las clases y métodos a los que debe aplicarse la sonda.

La especificación de destino es opcional. Si no se especifica ningún destino, la sonda se aplicará a todas las clases que procesa el motor de instrumentación.

La especificación de destino permite crear normas de filtro para incluir o excluir métodos de la instrumentación en función de patrones que se comparan respecto al paquete, clase y nombre de método, además de la firma del método. Los patrones pueden contener comodines, donde "*" coincide con cero o más caracteres.

Si los patrones comodín del destino coinciden con el paquete, clase, nombre y firma de un método, la propiedad type determina si el método se instrumenta (include) o no (exclude). Si los patrones no coinciden con el paquete, clase, nombre y firma de un método, por omisión, el método se instrumenta.

El destino incluye las siguientes propiedades:
Propiedad Descripción
type Obligatoria. La propiedad type determina si una sonda se aplica o no a un método de destino. Especifique include para aplicar la sonda a las clases y métodos que coinciden con los patrones comodín, y exclude para excluirlos.
package Opcional. Especifique un patrón comodín para compararlo respecto de la parte de paquete de los nombres de clase.Por ejemplo: java.util* coincidirá con cada clase del paquete java.util y sus subpaquetes. Si no se especifica, el valor por omisión es *.
className Opcional. Especifique un patrón comodín para compararlo respecto de los nombres de clase. Si no se especifica, el valor por omisión es *.
method Opcional. Especifique un patrón comodín para compararlo respecto de los nombres de método. Si no se especifica, el valor por omisión es *.
signature Opcional. Especifique un patrón comodín para compararlo con la firma de un método. (La firma es la serie que representa los argumentos y el tipo de retorno del método). Utilice el formato interno Java para las firmas de método. Por ejemplo: (Ljava/lang/Object;)D es la firma de un método que acepta un Object como parámetro y devuelve un doble. Este patrón comodín puede utilizarse para distinguir entre métodos sobrecargados. Si no se especifica, el valor por omisión es *.

Notas:

  • Una sonda puede tener varias especificaciones de destino que contengan sucesivas normas de destino. Para aplicar una sonda sólo a determinados métodos, primero especifique los métodos que desea incluir y, a continuación, añada una especificación de destino final package=* className=* method=* signature=* type=exclude.
  • Los nombres de paquete y clase que especifique también se comparan con los nombres de paquete y clase de las interfaces que implementa una clase. Por ejemplo, java.util.HashMap implementa la interfaz java.util.Map. Si una sonda tiene como destino el paquete java.util, el nombre de clase Map y el nombre de método size, la sonda se aplicará a java.util.HashMap.size() y al método size de cualquier otra clase que implemente la interfaz Map.
  • La comparación de patrones no tiene en cuenta las relaciones de herencia. Si la clase Derived amplía la clase Base y una sonda tiene como destino Base.run(), la sonda no se aplicará automáticamente a Derived.run().
  • Si el patrón de paquete de una especificación de destino es un único carácter de punto ("."), representa el paquete Java global sin nombre. De esta forma, puede establecer explícitamente como destino clases del paquete global.
  • Las sondas de sitio de llamada comparan los patrones y reglas de destino respecto del paquete, clase, nombre y firma de un método llamado. La comparación se realiza respecto al método llamado tal como se conocía durante la compilación; es decir, respecto a los nombres de método y clase conocidos estáticamente, y no a los métodos reales que se llamarán debido a la herencia y a las funciones virtuales. Si la llamada se realiza a través de una referencia a interfaz, el nombre de interfaz debe coincidir.
Ejemplo:

Para especificar un destino, seleccione Destino en el panel de árbol de la página Sondas y pulse Añadir y luego Editar en el panel de edición.

Este ejemplo sólo aplica la sonda a los métodos cuyos nombres empiezan por Get de las clases cuyos nombres terminan en Proxy del paquete com.example. Entradas de destino de tipos include y exclude; la entrada de destino exclude utiliza caracteres comodín de asterisco para excluirlo todo; la entrada include especifica los métodos exactos que deben ser destinos. Todas las demás clases y métodos se excluyen de la instrumentación.