Предупреждение VerifyError Eclipse: метод огромен

Я запускаю программу в Eclipse, которая включает в себя немного математики и ввода в базу данных. В какой-то момент это кажется слишком большим, потому что Eclipse выдает VerifyError. Когда я удаляю немного, он работает нормально, не имеет значения, что я удаляю, так что это не конкретная часть, вызывающая ошибку, а длина всего этого, кажется. Вот сообщение об ошибке:

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

Любые идеи быстрого решения? Возможно, этой информации недостаточно, в таком случае просто дайте мне знать, и я включу все, что когда-либо имело значение.


person user1741398    schedule 13.11.2012    source источник
comment
Первая ошибка означает, что ваш метод слишком велик (с точки зрения кода), что вы могли бы найти, просто осмотревшись. Понятия не имею о 2-й ошибке.   -  person Volker Stolz    schedule 13.11.2012
comment
Вы пытались разбить метод на несколько более мелких методов? Или, возможно, инкапсулировать код внутри метода в несколько методов?   -  person Zistack    schedule 13.11.2012
comment
Мой следующий шаг — разделить мой код на более мелкие методы, надеюсь, это решит проблему. я буду держать вас в курсе   -  person user1741398    schedule 13.11.2012


Ответы (1)


Проблема не в том, что ваш метод слишком велик. Что касается имбирных пряников, чрезмерно большие методы больше не приводят к отклонению метода. (Первое «отклоненное» сообщение появляется только потому, что оно использует макрос LOG_VFY_METH для сообщения имени метода.)

Настоящей проблемой является вторая жалоба, register2 v12-13 values 0,0 ... rejecting opcode 0xab. 0xab — это инструкция «добавить-двойную», которая принимает 64-битный аргумент, что означает, что типы в двух 32-битных регистрах Dalvik должны быть «двойной младший» и «двойной высокий». Проверяющий обнаружил, что они оба нулевого типа, что означает «неизвестно».

Так что либо ошибка в верификаторе Dalvik, либо ошибка в сгенерированном коде (возможно, в инструменте «dx»). Вы должны подать отчет на http://b.android.com/.

person fadden    schedule 13.11.2012