2012-11-13 28 views
0

我在Eclipse中運行一個程序,涉及到做一些數學和數據庫輸入。有一次,它似乎太多了,因爲Eclipse給了我一個VerifyError。當我刪除一點它運行良好,無所謂我刪除,所以它不是一個導致錯誤的具體部分,但它的長度,似乎。這裏的錯誤信息:VerifyError Eclipse「警告:方法是巨大的」

10-27 17:04:03.855: W/dalvikvm(12618): VFY: warning: method is huge (regs=643 insnsSize=7090) 
10-27 17:04:03.855: W/dalvikvm(12618): VFY: rejected Lcom/example/simpledatabasetutorial/DatabaseManageActivity;.onClick (Landroid/view/View;)V 
10-27 17:04:04.114: W/dalvikvm(12618): VFY: register2 v12-13 values 0,0 
10-27 17:04:04.114: W/dalvikvm(12618): VFY: rejecting opcode 0xab at 0x10f2 
10-27 17:04:04.114: W/dalvikvm(12618): VFY: rejected Lcom/example/simpledatabasetutorial/DatabaseManageActivity;.onClick (Landroid/view/View;)V 
10-27 17:04:04.114: W/dalvikvm(12618): Verifier rejected class Lcom/example/simpledatabasetutorial/DatabaseManageActivity; 
10-27 17:04:04.114: W/dalvikvm(12618): Class init failed in newInstance call (Lcom/example/simpledatabasetutorial/DatabaseManageActivity;) 
10-27 17:04:04.114: D/AndroidRuntime(12618): Shutting down VM 
10-27 17:04:04.114: W/dalvikvm(12618): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
10-27 17:04:04.145: E/AndroidRuntime(12618): FATAL EXCEPTION: main 
10-27 17:04:04.145: E/AndroidRuntime(12618): java.lang.VerifyError: com.example.simpledatabasetutorial.DatabaseManageActivity 

快速解決方案的任何想法?也許這是遠遠不夠的信息,如果是這樣的情況只是讓我知道,我會包括什麼是相關的。

+0

第一個錯誤意味着[你的方法太大](http://stackoverflow.com/q/4748771/60462)(根據代碼),你可以通過環顧四周找到它。不知道第二個錯誤。 – ShiDoiSi

+0

您是否試圖將方法分解爲多個更小的方法?或者也許將方法內的代碼封裝到多個方法中? – Zistack

+0

我的下一步是將我的代碼分成更小的方法,希望能夠解決這個問題。我會及時向大家發佈 – user1741398

回答

0

問題並不在於你的方法太大。從薑餅來看,過大的方法不再導致方法被拒絕。 (第一個「被拒絕」消息剛剛出現,因爲它使用宏來報告方法名稱。)

真正的問題是第二個投訴,register2 v12-13 values 0,0 ... rejecting opcode 0xab。 0xab是一個「加雙」指令,它採用64位參數,這意味着兩個32位Dalvik寄存器的類型應該是「雙低」和「雙高」。驗證者發現他們都是類型零,這是「未知的」。

所以,無論是Dalvik驗證程序中的錯誤,還是生成的代碼中的錯誤(可能來源於「dx」工具)。您應該在http://b.android.com/上提交報告。