O valor de cada entrada na tabela methodLineTables é o número de linha (no ficheiro de origem denominado
pela cadeia de dados classSourceFile) para a unidade executável correspondente. Por exemplo, a entrada número cinco na tabela dá o número de linha para a unidade executável número cinco.
Eis um exemplo de uma cadeia de caracteres methodLineTables:
#51+1201#75+11,41
Eis como interpretar a cadeia de caracteres:
- Os algarismos imediatamente a seguir ao sinal cardinal ("#") 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 algarismo a seguir ao sinal mais ("+") representa o número de linhas a adicionar ao número de linha anterior, de modo a produzir o número de linha para a unidade executável seguinte. No exemplo, os algarismos que se seguem ao sinal mais (+1201) são utilizados para calcular os números de linha para as unidades executáveis da segunda à quinta:
- 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 numa única linha 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, é especificado o número de linha completo para a unidade executável. No exemplo, a sexta unidade executável está na linha 75, vinte vezes maior que o anterior número de linha, que era 55. Neste caso, o número de linha completo é especificado para a sexta unidade executável, e o cálculo do número de linha relativo começa outra vez (#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 (",") significa o final de um método e o princípio do seguinte.
Os algarismos e símbolos que se seguem à vírgula são interpretados como antes. No exemplo, o número de linha da primeira unidade executável do segundo método é somente 4 vezes maior que o último número de linha calculado para o método anterior, de modo que 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 unidadesexecutáveis têm informações de origem a elas associadas. Algumas são criadas pelo compilador para implementar semânticas de linguagem
Java: tratamento de excepções, inicialização ou sincronização, por exemplo. Estas unidades executáveis geradas têm um número de linha completo de zero na cadeia de caracteres methodLineTables. Um número de linha completo zero indica que não há informações sobre números de linha disponíveis. Quando um método inteiro não tiver informações origem, parecerá ter uma única unidade executável correspondente ao número de linha zero.
Seguem-se alguns exemplos mais de cadeias methodLineTables e respectivos significados:
Cadeia de caracteres 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 começa por um sinal mais para iniciar uma série de incrementos a partir da linha zero. Neste exemplo, a primeira unidade executável do primeiro método começa na linha 5. |
+0 |
Se o primeiro método não tiver informações de origem, a cadeia começa por +0. Qualquer fragmento de sonda executableUnit que se aplique a tal método será inserido somente uma vez, no princípio do método. |
...#437,#457+123... |
Se a primeira unidade executável de um método começar mais de nove linhas após a última unidade executável para o método anterior, o padrão será uma vírgula, um sinal cardinal, 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 começa 20 linhas depois da última unidade executável do método anterior. |
...#437,+2... |
Pode que a última unidade executável num método necessite da notação "#", e a primeira unidade executável no método seguinte estar a pouca distância. Neste exemplo parcial, a última unidade executável de um método começa na linha 437, e a primeira unidade executável do método seguinte começa na linha 439. |