2009-10-02 8 views

Répondre

39

Si vous êtes sur la ligne de commande, puis javap -l affichera LineNumberTable et LocalVariableTable si elles sont présentes:

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 affichera le fichier source si elle est présente au début de la décompilation:

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

Par programme, je regarderais ASM plutôt que d'écrire encore un autre lecteur de bytecode.

-1

J'ai moi-même rencontré ce problème et j'ai créé un script Perl basé en partie sur la réponse de Pete qui montrait comment utiliser javap pour trouver les informations de débogage. Le script étend ce en automatisant le processus de lecture à travers JARs, et la vérification pour le débogage des informations sur chaque classe à l'intérieur, et les rapports des cours brisés qui manquent les informations de débogage:

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

Espérons que cela aidera la prochaine personne qui se heurte aux mêmes problèmes.

+2

Eh bien, le lien est mort, donc pas beaucoup d'aide maintenant. – OrangeDog

Questions connexes