Cada fragmento definido requer uma especificação de tipo. O tipo indica quando o fragmento será executado nos métodos de destino. Um probe pode conter mais de um fragmento, mas não pode conter mais de um fragmento de qualquer tipo fornecido.
Tipo de fragmento | Método ou Callsite | Descrição |
---|---|---|
entry | Método | Fragmentos entry são executados na entrada do método. Fragmentos entry não serão executados para métodos inseridos na classe pelo Probekit. |
exit | Método | Fragmentos exit são executados no método exit: uma saída normal, quando o método emite uma exceção ou quando uma exceção emitida é propagada fora do método. Fragmentos exit não serão executados para métodos que foram inseridos na classe pelo Probekit. |
catch | Método | Fragmentos catch são executados no início de uma cláusula catch no método ou no início de uma cláusula finally que é executada como resultado de uma exceção. |
staticInitializer | Método | Fragmentos staticInitializer são executados dentro do inicializador de classe de cada classe com probe. Se a classe ainda não tiver um inicializador estático, será criado um. Para obter informações adicionais, consulte O Tipo de Fragmento de Probe staticInitializer. |
executableUnit | Método | Fragmentos executableUnit são executados antes de cada unidade de código executável em métodos que correspondem ao destino do probe e à especificação do filtro, e para o qual o código fonte está disponível. Se o método não tiver informações sobre a linha de origem, ele parecerá ter uma única unidade executável, numerada com zero. Para obter informações adicionais, consulte O Tipo de Fragmento de Probe executableUnit. |
beforeCall | Callsite | Fragmentos beforeCall são executados no método de chamada imediatamente antes do método de destino ser chamado. Não válido para probes de método. |
afterCall | Callsite | Fragmentos afterCall são executados no método de chamada imediatamente após a saída do método de destino: uma saída normal ou quando o método de destino emite uma exceção. Não válido para probes de método. |
Um probe pode possuir vários fragmentos que se aplicam ao mesmo local em um método: por exemplo, um fragmento entry e o primeiro local executableUnit. Outro exemplo é um fragmento catch e seu local associado executableUnit, porque as cláusulas catch para manipulação de exceção sempre representam o início de uma nova unidade executável. Nesses casos o código de fragmento executableUnit será executado depois do código do fragmento entry ou catch. Uma conseqüência é que os fragmentos entry, se presentes, sempre serão executados antes de outros tipos de fragmentos.
Não é possível misturar fragmentos de método e fragmentos callsite em um único probe, mas é possível ter probes de método e probes callsite no mesmo arquivo de origem Probekit (arquivo probe).
Para especificar um tipo de fragmento, selecione uma entrada Fragmento na área de janela de árvore da página Probes e faça uma seleção da lista Tipo de Fragmento na área de janela de edição.