2012-04-02 4 views
10

Я нахожу байт-код VerifyErrors, как известно, трудно отлаживать. JVM дает очень мало обратной связи, как правило, только текущий класс, а иногда и метод.Хорошие инструменты для отладки VerifyError?

Некоторые примеры ошибок, я обычно сталкиваются при ручной инженерных байткод через ASM или 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

(Для четкого измерения; Я знаю, что все эти означают, я заинтересован в инструменты или методы, чтобы отладить причину их)

Мой вопрос:. Есть ли какой-либо инструмент там, что дает детальную информацию об этих типах ошибок ? Я бы, например, получить информацию, такие как

  • javap -подобных выходные
  • ссылки на линии-номера (или смещения опкод байт)
  • информаци операнда стека (типы/глубина) на каждой линии
  • более описательные сообщения об ошибках
+1

http://stackoverflow.com/questions/3438404/java-lang-verifyerror это поможет? – Tom

+0

http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=%2Frzatk%2FEX4AA2.htm это помогло? – Tom

ответ

2

Kraktau project Я написал полезен для отладки ошибок проверки. Он способен давать смещения байт-кода, где происходит ошибка, а также информацию о стеке и локальном типе для каждой инструкции. Он даже правильно обрабатывает флаги и маскирует информацию для подпрограмм. Он способен поймать практически все ошибки.

Пока не существует специального интерфейса для распечатки информации о проверке, но если вы все еще хотите, какую функциональность вы хотите, я могу добавить ее. Тем временем попытка декомпиляции вашего класса с Krakatau выведет сообщение об ошибке с информацией о ошибке проверки и информации о типе инструкции, где она произошла.

Обновление: Krakatau больше не выполняет проверку в связи с проблемами с производительностью. Если вы хотите сделать вердикцию, вам необходимо выполнить checkout commit 3724c05ba11ff6913c01ecdfe4fde6a0f246e5db.

Смежные вопросы