O valor de cada entrada na tabela methodLineTables
corresponde a um número de linha no arquivo de origem referenciado
pela cadeia de dados classSourceFile, o número da linha de origem de uma
unidade executável.
A seguir é apresentado um exemplo de uma cadeia
methodLineTables:
#51+1201#75+11,41
A cadeia deve ser interpretada da seguinte maneira:
- Os dígitos que seguem imediatamente um sinal de sustenido ("#") representam
um número de linha completo no código fonte de uma classe. No exemplo,
a primeira unidade executável no primeiro método na classe está na
linha 51.
- Cada dígito único que segue um sinal de adição ("+") representa o
número de linhas a adicionar ao número de linha anterior, para produzir o
número de linha para a próxima unidade executável. No exemplo, os dígitos
que seguem o sinal de adição (+1201) são utilizados para calcular os
números de linha para a segunda até a quinta unidade executável:
- 51 + 1 = o número de linha da segunda unidade
executável: 52
- 52 + 2 = o número de linha da terceira unidade executável: 54
- 54 + 0 = o número de linha da quarta unidade executável: 54 (duas unidades
executáveis em uma linha de origem)
- 54 + 1 = o número de linha da quinta unidade executável: 55
- Quando um incremento de número de linha for negativo ou maior que nove,
o número de linha completo da unidade executável está especificado. No
exemplo, a sexta unidade executável está na linha 75, vinte a mais
que o número de linha anterior, que era 55. Neste caso, o número
de linha completo é especificado para a sexta unidade executável e o
cálculo de número de linha relativo começa novamente (#75+11):
- 75 = o número de linha da sexta unidade executável
- 75 + 1 = o número de linha da sétima unidade executável: 76
- 76 + 1 = o número de linha da oitava unidade executável: 77
- Uma vírgula (",") denota o fim de um método e o início
do próximo. Os dígitos e símbolos que seguem a vírgula são interpretados
como anteriormente. No exemplo, o número de linha da primeira unidade executável
do segundo método é apenas 4 maior que o último número de linha
calculado para o método anterior; assim, o cálculo de número de linha
relativo continua após a vírgula (,41):
- 77 + 4 = o número de linha da primeira unidade executável do segundo método:
81
- 88 + 1 = o número de linha da segunda unidade executável do segundo método:
89
Nota: Nem todas as unidades executáveis
terão informações de origem associadas a elas. Algumas são criadas
pelo compilador para incrementar a semântica da linguagem Java; manipulação de
exceções, inicialização ou sincronização, por exemplo. Essas
unidades executáveis geradas terão um número de linha completo igual a zero
na cadeia methodLineTables. Um número de linha completo zero indica
que nenhuma informação de número de linha está disponível. Quando um método inteiro
não possui informações de origem, ele aparecerá como tendo uma única unidade
executável correspondente ao número de linha zero.
A seguir são apresentados alguns
exemplos adicionais das cadeias methodLineTables e seus significados:
Cadeia de methodLineTables |
Significado |
+5 |
Se o número de linha da primeira unidade
executável do primeiro método for menor que dez, a cadeia inteira é iniciada
com um sinal de adição para iniciar uma série de incrementos a partir da linha zero. Neste
exemplo, a primeira unidade executável do primeiro método inicia na
linha 5. |
+0 |
Se o primeiro método não possuir informações de origem,
a cadeia será iniciada com +0. Qualquer fragmento de probe executableUnit
que se aplique a tal método será inserida apenas uma vez,
no início do método. |
...#437,#457+123... |
Se a primeira unidade executável de um método iniciar
mais de nove linhas após a última unidade executável do método
anterior, o padrão é uma vírgula, um sinal de sustenido e a cadeia do número
de linha para a primeira unidade executável no novo método. Neste
exemplo parcial, a primeira unidade executável no novo método inicia
20 linhas após a última unidade executável do método anterior. |
...#437,+2... |
É possível que a última unidade executável
em um método requeira a notação "#" e a primeira unidade
executável no próximo método esteja a uma pequena distância. Neste exemplo
parcial, a última unidade executável de um método inicia na linha 437
e a primeira unidade executável do próximo método inicia na linha
439. |