2012-04-02 15 views
10

Trovo il codice bytecode VerifyErrors notoriamente difficile da eseguire il debug. La JVM fornisce un feedback molto piccolo, in genere solo la classe corrente e talvolta il metodo.Buoni strumenti per il debug di VerifyError?

Alcuni esempi di errori che in genere incontrano quando manualmente ingegneria bytecode tramite ASM o Jasmin:

  • Stack size too large
  • Unable to pop operand off an empty stack
  • Falling off the end of the code
  • Expecting to find object/array on stack
  • Incompatible object argument for function call
  • Inconsistent stack height 4 != 2

(Per essere chiari; So cosa tutti questi significa, io sono interessato a strumenti o tecniche per eseguire il debug la causa di essi)

mia domanda:. C'è qualche strumento là fuori che fornisce un feedback dettagliato su questi tipi di errori ? Vorrei per esempio apprezzare informazioni quali

  • javap -come uscita
  • riferimenti alla linea-numeri (o offset codice operativo byte)
  • operando informazioni di stack (tipo/profondità) su ogni linea
  • più messaggi di errore descrittivi
+1

http://stackoverflow.com/questions/3438404/java-lang-verifyerror aiuterà? – Tom

+0

http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=%2Frzatk%2FEX4AA2.htm è stato d'aiuto? – Tom

risposta

2

Il Kraktau project che ho scritto è utile per il debug degli errori di verifica. È in grado di fornire gli offset del bytecode in cui si verifica l'errore e lo stack e le informazioni sul tipo locale per ogni istruzione. Gestisce correttamente anche i flag e le informazioni sulla maschera per le subroutine. È in grado di catturare praticamente tutti gli errori.

Non esiste ancora un'interfaccia specifica per la stampa delle informazioni di verifica, ma se si è ancora io che tipo di funzionalità si desidera, è possibile aggiungerne una. Nel frattempo, tentando di decompilare la classe con Krakatau, verrà stampato un messaggio di errore con informazioni sull'errore di verifica e le informazioni sul tipo dell'istruzione in cui si è verificato.

Aggiornamento: Krakatau non esegue più la verifica a causa di problemi di prestazioni. Se vuoi fare la verifica, devi effettuare il checkout per il commit 3724c05ba11ff6913c01ecdfe4fde6a0f246e5db.

Problemi correlati