Я нахожу байт-код VerifyErrors
, который, как известно, трудно отлаживать. JVM дает очень мало обратной связи, как правило, только текущий класс, а иногда и метод.
Некоторые примеры ошибок, с которыми я обычно сталкиваюсь при ручном проектировании байт-кода через 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
-образный вывод - ссылки на номера строк (или смещения байта опкода)
- информация стека операндов (типы/глубина) в каждой строке
- более подробные сообщения об ошибках