O valor de cada entrada na tabela methodLineTables é o número da linha (no arquivo de origem nomeado pela cadeia de dados classSourceFile) para a unidade executável correspondente. Por exemplo, o número cinco de entrada na tabela fornece
o número da linha para a unidade executável número cinco.
A seguir há um exemplo de uma cadeia methodLineTables:
#51+1201#75+11,41
A seguir está a forma de interpretação da cadeia:
- Os dígitos imediatamente após um sinal de número ("#") 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 após um sinal de mais ("+") representa o número de linhas a serem incluídas no número de linha anterior para produzir o número de linha para a próxima unidade executável. No exemplo, os dígitos após o sinal de mais (+1201) são utilizados para calcular os números de linha da segunda à 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 na linha de origem)
- 54 + 1 = o número de linha da quinta unidade executável: 55
- Quando um incremento de número de linha é negativo ou maior que nove, o número de linha completo para a unidade executável é especificado. No exemplo, a sexta unidade executável está na linha 75, 20 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 relativo do número de linha 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 final de um método e o início do próximo. Os dígitos e símbolos após a vírgula são interpretados como antes. No exemplo, o número de linha da primeira unidade executável do segundo método tem apenas 4 a mais que o último número de linha calculado para o método anterior, portanto o cálculo do 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
- 81 + 1 = o número de linha da segunda unidade executável do
segundo método: 82
Nota: Nem todas as unidades executáveis têm informações de origem associadas a elas. Algumas são criadas pelo compilador para implementar semânticas da linguagem Java: manipulação de exceção, inicialização ou sincronização, por exemplo. Essas unidades executáveis geradas têm um número de linha completo de zero
na cadeia methodLineTables. Um número de linha completo de zero indica que nenhuma informação do número de linha está disponível. Quando um método inteiro não tem nenhuma informação de origem, ele parece ter uma unidade executável única correspondente ao
número da linha zero.
A seguir há alguns exemplos de cadeias methodLineTables e seus significados:
Cadeia 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 iniciará com um sinal de mais 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 tiver informações de origem, a cadeia iniciará com +0. Qualquer fragmento de probe executableUnit que se aplique a tal método será inserido 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 será uma vírgula, um sinal de número 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 precise da 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. |