O Probekit constitui uma estrutura na plataforma Eclipse que se pode utilizar para compor e utilizar sondas.
As sondas são fragmentos de código Java™ que se podem inserir num
programa para facultar informações sobre o mesmo durante a execução.
Para compreender o conceito de sonda, comece com o exemplo de sonda aqui descrito.
Trata-se de uma sonda básica que imprime uma mensagem que identifica cada método chamado quando o programa é executado.
As sondas definem-se com entradas que se fazem no editor do Probekit. Este exemplo contém um único fragmento; os
fragmentos determinam o que a sonda realiza. Seguem-se definições de fragmentos:
- Especificação do tipo de fragmento. Este fragmento é um fragmento de entrada, ou seja, é executado no momento da entrada no método.
- Artigos de dados a que o fragmento pode aceder. Aqui os artigos de dados permitem ao fragmento aceder a nomes de classes e métodos.
- A porção de código Java que define a lógica da sonda.
Este fragmento chama o System.out.println para apresentar o nome da
classe e método dos métodos que forem executados.
Este é o aspecto da sonda no editor do Probekit:

Depois de criar uma sonda com o editor do Probekit, pode aplicá-la aos ficheiros jar e de classes do seu projecto. Em seguida, quando executar o projecto, o código do fragmento será executado junto com o programa em questão.
Segue-se uma descrição geral da criação e utilização de sondas, incluindo informações sobre a ajuda que se pode obter do Probekit:
- Utiliza-se o editor do Probekit para criar sondas em ficheiros origem do Probekit.
Os ficheiros origem do Probekit têm de conter a extensão .probe. Podem
conter uma ou mais sondas e cada sonda pode conter um ou mais fragmentos de
sonda.
- O Probekit junta os fragmentos de sonda num conjunto de métodos Java e em seguida compila-os. Quando o Probekit compila uma sonda, combina os fragmentos da sonda com texto habitual Java, e gera código fonte Java para uma nova classe de sondas. As funções geradas pelos fragmentos de sonda aparecem como métodos estáticos da nova classe de sondas.
- Quando se aplica uma sonda, especificam-se classes destino e ficheiros jar que se pretende investigar.
O motor BCI (byte-code instrumentation - instrumentação de código de bytes) do
Probekit remete para a lista de sondas disponíveis e respectivos padrões
destino e insere chamadas de métodos de fragmentos de sondas nos programas
destino. O processo de inserção de instruções de chamada em métodos destino denomina-se instrumentação.
Uma classe que contenha um método instrumentado denomina-se classe sondada.
Os artigos de dados solicitados por um fragmento de sonda (por exemplo, o nome do método e o nome da classe) são transmitidos enquanto argumentos.
- Após a aplicação ter sido instrumentada. Os fragmentos de sonda são executados quando o programa for executado.
O
tipo do fragmento de sonda determina o momento de execução de um fragmento. Poderá especificar tipos que façam com que o fragmento seja executado nas seguintes ocasiões:
- No momento da entrada do método.
- No momento da saída do método (um retorno normal ou em resultado de uma excepção).
- No momento de tratamento da excepção, ou seja, no topo de uma cláusula
catch ou no topo de uma cláusula finally que seja chamada em
resultado de uma excepção.
- Antes do código original no inicializador estático da classe.
- Antes de cada unidade de código executável (quando estão disponíveis informações de código fonte).
- Quando são chamados métodos específicos. (Neste caso, a instrumentação realiza-se no local da chamada, e não dentro do método chamado.)
Os fragmentos de sondas podem aceder a artigos de dados que
facultem diversas espécies de informações sobre a aplicação em que estão inseridos.
Por exemplo:
- Nome de pacote, classe e método
- Assinatura do método
- este objecto
- Argumentos
- Valor de retorno
Se quiser que a sua sonda seja aplicada somente a certas classes e métodos,
especifique destinos ou configure filtros.
Para mais informações, consulte Destinos e
filtros de sondas.