Como a JVM pega a linha do .class?

2 respostas
AUser

Olá,

Só uma questão interessante que gostaria de discutir com vocês, se alguém sabe. Usando reflections tenho como pegar em que linha está um método específico de um .CLASS. Assim como quando dá um erro ele sabe exatamente a linha. Ex: (NullPointer exc. on line 6). O grande negócio é: como isso funciona? Antes de mandar pro .CLASS ele nao converte pro bytecode direto. Tanto que se eu tentar decompilar um .class vou receber uma série de coisas não interessantes em alguns casos.

Agora, como diabos será que ele marca a linha?

Obrigado!

2 Respostas

otavio

Quando você compila os códigos com a opção -g, várias informações de debug são deixadas como nome dos parametros de métodos, linha do .java e afins.

Os decompiladores usam essas informações para transformar .class em .java novamente.

Abs

Mauricio_Linhares

O bytecode guarda a linha original onde estava o código. Exemplo:

public AlreadySelectedException(java.lang.String message); 0 aload_0 [this] 1 aload_1 [message] 2 invokespecial org.apache.commons.cli.ParseException(java.lang.String) [1] 5 return Line numbers: [pc: 0, line: 37] [pc: 5, line: 38] Local variable table: [pc: 0, pc: 6] local: this index: 0 type: org.apache.commons.cli.AlreadySelectedException [pc: 0, pc: 6] local: message index: 1 type: java.lang.String

Criado 4 de maio de 2009
Ultima resposta 4 de mai. de 2009
Respostas 2
Participantes 3