2009-10-02 11 views

Odpowiedz

39

Jeśli w wierszu poleceń, a następnie javap będzie -l wyświetli LineNumberTable i LocalVariableTable jeśli występuje:

peregrino:$ javac -d bin -g:none src/Relation.java 
peregrino:$ javap -classpath bin -l Relation 
public class Relation extends java.lang.Object{ 
public Relation(); 

peregrino:$ javac -d bin -g:lines src/Relation.java 
peregrino:$ javap -classpath bin -l Relation 
public class Relation extends java.lang.Object{ 
public Relation(); 
    LineNumberTable: 
    line 1: 0 
    line 33: 4 

peregrino:$ javac -d bin -g:vars src/Relation.java 
peregrino:$ javap -classpath bin -l Relation 
public class Relation extends java.lang.Object{ 
public Relation(); 

    LocalVariableTable: 
    Start Length Slot Name Signature 
    0  5  0 this  LRelation; 

javap -c wyświetli plik źródłowy jeśli jest obecny na początku dekompilacji:

peregrino:$ javac -d bin -g:none src/Relation.java 
peregrino:$ javap -classpath bin -l -c Relation | head 
public class Relation extends java.lang.Object{ 
    ... 

peregrino:$ javac -d bin -g:source src/Relation.java 
peregrino:$ javap -classpath bin -l -c Relation | head 
Compiled from "Relation.java" 
public class Relation extends java.lang.Object{ 
    ... 

Programowo, raczej patrzę na ASM niż na pisanie kolejnego czytnika bajtowego.

-1

Sam wpadłem na ten problem i stworzyłem skrypt Perla oparty częściowo na odpowiedzi Pete'a, która pokazała jak używać javap do wyszukiwania informacji o debugowaniu. Skrypt rozciąga się to poprzez automatyzację procesu czytania przez słoiki i sprawdzanie debugowania informacje o każdej klasie wewnątrz i zgłaszaniem niedziałających klas, które są brakujące informacje debugowania:

https://gist.github.com/megahall/5416632

Mam nadzieję, że to pomoże następna osoba, która prowadzi do tych samych problemów.

+2

Cóż, link jest martwy, więc teraz niewiele pomogę. – OrangeDog

Powiązane problemy