Especificações de Destino de Probe

Uma especificação de destino indica as classes e métodos aos quais o probe deve ser aplicado.

A especificação de destino é opcional. Quando nenhum destino for especificado, o probe será aplicado a todas as classes processadas pelo mecanismo de instrumentação.

A especificação de destino permite criar regras de filtragem para incluir ou excluir métodos de instrumentação com base em padrões que são correspondidos em relação ao pacote, classe e nome do método, mais a assinatura do método. Os padrões podem conter curingas, em que "*" corresponde a zero ou mais caracteres.

Se os padrões de um curinga de destino corresponderem a um pacote do método, classe, nome e assinatura, a propriedade tipo determinará se o método é instrumentado (incluir) ou não (excluir). Se os padrões não corresponderem a um pacote, classe, nome e assinatura de um método, por padrão, o método será instrumentado.

O destino inclui as seguintes propriedades:
Propriedade Descrição
type Obrigatório. A propriedade type determina se um probe é aplicada ou não a um método de destino. Especifique include para aplicar o probe em classes e métodos que correspondem aos padrões de curingas, exclude para excluí-los.
package Opcional. Especifique um padrão de curinga para corresponder à parte dos nomes de classe de um pacote. Por exemplo: java.util* corresponde a cada classe no pacote java.util e seus subpacotes. Se não for especificado, o valor padrão será *.
className Opcional. Especifique um padrão de curinga para corresponder aos nomes de classes. Se não for especificado, o valor padrão será *.
method Opcional. Especifique um padrão de curinga para corresponder aos nomes de métodos. Se não for especificado, o valor padrão será *.
signature Opcional. Especifique um padrão curinga para corresponder à assinatura do método. (A assinatura é uma cadeia que representa os argumentos do método e tipo de retorno). Utilize o formato interno Java para assinaturas de método. Por exemplo: (Ljava/lang/Object;)D é a assinatura de um método que utiliza um Objeto como um parâmetro e retorna o dobro. Esse padrão de curinga pode ser utilizado para distinguir entre métodos sobrecarregados. Se não for especificado, o valor padrão será *.

Notas:

  • O probe pode ter várias especificações de destino que contêm regras de destino sucessivas. Para aplicar o probe apenas a determinados métodos, primeiro especifique os métodos que deseja incluir e, em seguida, inclua uma especificação de destino final package=* className=* method=* signature=* type=exclude.
  • Os nomes de pacotes e de classes especificados também são verificados em relação aos nomes de pacotes e de classes de quaisquer interfaces implementadas pela classe. Por exemplo, java.util.HashMap implementa a interface java.util.Map. Se um probe tem como destino o pacote java.util, o nome da classe Map e o nome do método size, o probe será aplicado a java.util.HashMap.size() e ao método size de qualquer outra classe que implemente a interface Map.
  • A correspondência padrão não considera relacionamentos de herança. Se a classe Derivada estender a classe Base e os destinos do probe Base.run(), o probe não será aplicado automaticamente a Derived.run().
  • Se o padrão do pacote em uma especificação de destino for um caractere de ponto único ("."), ele representará o pacote Java global, não nomeado. Isso permite que você utilize explicitamente como destino classes no pacote global.
  • Os probes callsite correspondem padrões e regras de destino com o pacote, a classe, o nome e a assinatura de um método chamado. A correspondência é feita em relação ao método chamado como era conhecido na hora da compilação; isto é, em relação aos nomes de classes e de métodos conhecidos estaticamente, não os métodos reais que serão chamados devido às funções virtuais e de herança. Se a chamada for feita através de uma referência de interface, o nome da interface deverá ser correspondido.
Exemplo:

Para especificar um destino, selecione Destino na área de janela de árvore da página Probes e clique em Incluir e, em seguida, em Editar na área de janela de edição.

Este exemplo aplica o probe apenas a métodos cujos nomes iniciam com Get em classes cujos nomes terminam com Proxy no pacote com.example. Entradas de destino de tipos inclusão e exclusão; a entrada de destino de exclusão utiliza curingas asteriscos para excluir tudo; a entrada de inclusão especifica os métodos exatos a serem destinados. Todas as outras classes e métodos são excluídos da instrumentação.