débogage d'une application java.lang.Exception verifyerror


Je reçois un java.lang.VerifyError, sur la page d'oracle, il indique qu'il est lancé à cause d'incohérences ou de problèmes de sécurité. Mais cela peut être beaucoup de choses et je ne sais même pas ce que je cherche ou dans quelle classe je devrais regarder.

Le message d'erreur ne clarifie pas non plus les choses:

java.lang.VerifyError: (class: proto/lua/libraries/ProtoLib$Lib1, method: call signature: ()Lproto/lua/LuaValue;) Wrong return type in function

Quelles incohérences devrais-je être à l'affût? Et quelqu'un peut-il dire dans quelle classe je devrais regarder en fonction de cette erreur?

Toute aide/information générale sur le sujet de ces exceptions seraient appréciées aussi

EDIT: J'ai réécrit une grande partie de la bibliothèque Lua et jusqu'à ce que j'obtienne cette erreur qui fonctionnait parfaitement dans tous les aspects et j'utilise Java SE 6 Update 26

MODIFIER: Erreur entière:

java.lang.VerifyError: (class: proto/lua/libraries/ProtoLib$Lib1, method: call signature: ()Lproto/lua/LuaValue;) Wrong return type in function
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
    at java.lang.Class.getConstructor0(Class.java:2699)
    at java.lang.Class.newInstance0(Class.java:326)
    at java.lang.Class.newInstance(Class.java:308)
    at proto.lua.libraries.LibFunction.bind(LibFunction.java:169)
    at proto.lua.libraries.LibFunction.bind(LibFunction.java:152)
    at proto.lua.libraries.ProtoLib.call(ProtoLib.java:26)
    at proto.lua.otherstuff.OneArgFunction.call(OneArgFunction.java:66)
    at proto.lua.LuaValue.load(LuaValue.java:1358)
    at proto.lua.RavenLua.standardGlobals(RavenLua.java:100)
    at proto.ProjectPROTO.<clinit>(ProjectPROTO.java:51)
Could not find the main class: proto.ProjectPROTO.  Program will exit.
Exception in thread "main" Java Result: 1

Tout proto.les classes xxx.xxx.xxx font partie de la source

EDIT: Eh bien, apparemment, l'erreur a été causée car j'ai oublié certaines annotations @ Override ,je ne sais pas ce qui les a fait commencer à donner des erreurs bien.

Author: Tim, 2011-07-13

3 answers

Quelle est la trace complète de la pile? Il devrait montrer quelle classe appelle cette méthode. La raison en est probablement que le code est exécuté sur une version différente de la bibliothèque sur laquelle il a été compilé, et qu'il y a des changements incompatibles entre ces versions de bibliothèque (d'après le message d'erreur, il semble s'agir d'un type de retour de méthode différent).

Si cette erreur ne concerne pas une bibliothèque, mais votre propre code, faites une construction propre. Le compilateur doit produire un erreur de compilation sur tout ce qui peut provoquer une erreur de vérification lors de l'exécution. Ou si le code source est correct, il devrait reconstruire tous les fichiers de classe correctement.

 5
Author: Esko Luontola, 2011-07-13 15:36:53

La plus grande source de java.lang.Vérifiez que les erreurs sont des incompatibilités de version JVM entre vos bibliothèques dépendantes et votre application principale. Donc, si vous exécutez votre application en utilisant Java 5 et que la bibliothèque dépendante a été compilée avec Java 6, vous pouvez rencontrer des problèmes. Je commencerais par étudier quelle version de Java a été utilisée pour compiler la version de Protolib? vous êtes en utilisant.

 4
Author: Perception, 2011-07-13 15:22:20

Selon la réponse de @Perception, mais j'ajouterais:

La raison la plus habituelle est que votre environnement d'exécution utilise une version JVM différente (plus ancienne) de votre environnement de compilation.

 1
Author: Bohemian, 2011-07-13 15:24:45