2009-10-02 16 views

Respuesta

39

Si estás en la línea de comandos, a continuación, javap -l se mostrará LineNumberTable y LocalVariableTable si está presente:

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 mostrará el archivo de origen si está presente en el inicio de la descompilación:

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{ 
    ... 

Programáticamente, vería ASM en lugar de escribir otro lector de códigos de bytes.

-1

Me encontré con este problema yo mismo, y creé un script de Perl basado en parte en la respuesta de Pete que mostraba cómo usar javap para encontrar la información de depuración. El guión se extiende sobre este mediante la automatización del proceso de lectura a través de los JAR, y la comprobación de depurar la información sobre todas las clases en el interior, e informar de cualquier clases rotos que faltan la información de depuración:

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

Esperamos que esto ayudará a la siguiente persona que se encuentra con los mismos problemas.

+2

Bueno, el enlace está muerto, así que no hay mucha ayuda ahora. – OrangeDog

Cuestiones relacionadas