Cada fragmento que definir necessita de uma especificação de tipo. O tipo indica quando o fragmento será executado nos métodos destino. Uma sonda pode conter mais de um fragmento, mas não mais de um fragmento de um tipo.
Tipo de fragmento | Método ou Callsite | Descrição |
---|---|---|
entry | Método | Os fragmentos entry são executados aquando da entrada do método. Os fragmentos entry não são executados no caso de métodos que tenham sido inseridos na classe pelo Probekit. |
exit | Método | Os fragmentos exit são executados aquando da saída do método: uma saída normal, quando o método devolve uma excepção ou quando uma excepção devolvida se propaga para fora do método. Os fragmentos exit não são executados no caso de métodos que tenham sido inseridos na classe pelo Probekit. |
catch | Método | Os fragmentos catch são executados no princípio de uma cláusula catch no método ou no princípio de uma cláusula finally que seja executada em resultado de uma excepção. |
staticInitializer | Método | Os fragmentos staticInitializer são executados dentro do inicializador de classes de cada classe sondada. Se a classe não tiver um inicializador de classes, será criado um. Para mais informações, consulte Tipo de fragmento de sonda staticInitializer . |
executableUnit | Método | Os fragmentos executableUnit são executados antes de cada unidade executável de código em métodos que correspondam à especificação de filtro e de destino da sonda, e para os quais esteja disponível código fonte. Se o método não tiver informações de linha origem, parecerá ter uma única unidade executável, numerada a zero. Para mais informações, consulte Tipo de fragmento de sonda executableUnit . |
beforeCall | Callsite | Os fragmentos beforeCall são executados no método de chamada imediatamente antes de o método destino ser chamado. Não são válidos para sondas de método. |
afterCall | Callsite | Os fragmentos afterCall são executados no método de chamada imediatamente após o método destino sair: quer por saída normal, quer quando o método destino devolver uma excepção. Não são válidos para sondas de método. |
Uma sonda pode ter vários fragmentos aplicáveis à mesma localização num método: por exemplo, um fragmento entry e a primeira localização executableUnit. Outro exemplo consiste num fragmento catch fragment e respectiva localização executableUnit, dado que as cláusulas catch para tratamento de excepções representam sempre o início de uma nova unidade executável. Nestes casos, o código do fragmento executableUnit é executado após o código do fragmento entry ou catch. Uma das consequências é que os fragmentos entry, se os houver, são sempre executados antes de outros tipos de fragmentos.
Não pode misturar fragmentos de método e de callsite numa única sonda, mas pode ter sondas de método e de callsite no mesmo ficheiro de origem Probekit (ficheiro probe).
Para especificar um tipo de fragmento, seleccione uma entrada Fragmento na área de janela em árvore da página Sondas e faça uma selecção na lista Tipos de Fragmentos na área de janela de edição.