Nel mio progetto di strumentazione bytecode, inciampo frequentemente su VerifyErrors. Tuttavia, il verificatore java predefinito fornisce poche informazioni su quale istruzione ha generato l'errore (fornisce solo il metodo e un piccolo messaggio). Esiste un verificatore bytecode stand-alone che fornisce un aiuto un po 'più avanzato nel localizzare l'errore, almeno nella precisa posizione dell'istruzione? Grazie.Verifier Bytecode stand alone
risposta
ASM CheckClassAdaptor.verify() dà grandi risposte: http://asm.ow2.org/
Sono stato anche alla ricerca di qualcosa che potesse segnalare potenziale verificare errori, ma soprattutto IncompatibleClassChangeError
s. Ho scritto un piccolo progetto di test con una classe API e un'altra classe client che chiama i metodi API, oltre a una classe principale per eseguire un verificatore; poi ha cambiato l'API, ricompilandolo ma non il client, e controllato per vedere cosa poteva essere catturato. Usato -target 7
anche se per ora non ci sono funzioni speciali di JDK 7.
Primo e più ovvio, Class.forName
può trovare determinati errori nella firma della classe client, ma non sembra controllare i corpi del metodo per le chiamate a metodi API inesistenti e simili, anche se si chiama getDeclaredMethods
; gli errori vengono segnalati dalla VM solo quando viene effettivamente eseguita la riga di codice problematica.
JustIce in BCEL 5.2 sembra essere più semplice;
org.apache.bcel.verifier.Verifier.main(new String[] {clazz});
fa il lavoro:
Pass 3a, method number 1 ['public void m()']:
VERIFIED_REJECTED
Instruction invokestatic[184](3) 4 constraint violated:
Referenced method 'x' with expected signature '()V' not found in class 'API'.
....
ho provato ASM 4.0, ma
org.objectweb.asm.util.CheckClassAdapter.main(new String[] {clazz});
non funziona; forse controlla il formato dei metodi, ma non il collegamento. Inlining main
e passando checkDataFlow=true
non aiuta.
Cercando, ho trovato anche https://kenai.com/hg/maxine~maxine/file/8429d3ebc036/com.oracle.max.vm/test/test/com/sun/max/vm/verifier/CommandLineVerifier.java ma non sono riuscito a trovare alcun modo per farlo funzionare; il test dell'unità di accompagnamento genera un ClassNotFoundException
durante l'esecuzione.
- 1. Macro Excel stand alone
- 2. stand alone php app
- 3. Fabfile stand-alone per tessuto?
- 4. Compile stand alone con Cygwin
- 5. Debugger stand-alone leggero C#
- 6. fare binari stand-alone in Julia?
- 7. In memoria, Stand-Alone, disconnessione recordset ADO
- 8. E 'possibile produrre eseguibile haskell stand alone
- 9. Come posso firmare i miei JAR stand-alone di ProGuard?
- 10. Gemme di rubino in script di rubini stand alone
- 11. La creazione di stand-alone lucido App - Chrome errore
- 12. Come creare un'applicazione web di sollevamento stand-alone?
- 13. Installa TWIG template engine stand alone, senza compositore
- 14. Differenza tecnica tra un'app stand-alone e un'app web
- 15. Posso creare un'app di Apple Watch stand alone?
- 16. Incorporamento di Dart VM in un'applicazione desktop stand-alone
- 17. Compila per stand-alone exe per C# applicazione in Visual Studio 2010
- 18. I passaggi più semplici per convertire TCL TK in un'applicazione stand alone
- 19. ActionMailer.Net Stand-Alone: non esiste un provider di build registrato per l'estensione ".cshtml"
- 20. Avvio a molla distribuito in Tomcat fornisce 404 ma funziona Stand-alone
- 21. goniometro stand-alone selenio fallisce: Errore: Timeout durante l'attesa per il server WebDriver a
- 22. semplici metriche del codice stand-alone plug Maven per Java 7
- 23. È possibile avvolgere l'applicazione PHP/MySQL in binario che può funzionare come applicazione stand alone?
- 24. Quale DataSource per l'applicazione utilizzata sia in stand-alone e contesto webapp (Java 7, Tomcat 7)?
- 25. l'editor di layout può essere estratto da Eclipse ed eseguito stand alone?
- 26. JMSSerializer stand alone - L'annotazione non esiste o non può essere caricata automaticamente
- 27. Percorsoeseguibile deve essere specificato quando non è in esecuzione all'interno di uno stand alone exe
- 28. Haskell autenticazione applicazione stand-alone del desktop (utilizzando Google/Facebook/Twitter/conti ecc)
- 29. Come utilizzare Microsoft Application Verifier
- 30. Analisi bytecode in Java
Perché non ci ho pensato. In realtà sto usando BCEL, ma non mi è mai capitato di controllare il suo verificatore. In realtà ha uno chiamato JustIce. –