Неверное количество аргументов в стеке при попытке инструментации java байткода

Я работаю над небольшим инструментом инструментализации байткода java.

Общая идея заключается в том, чтобы переименовать все методы класса с суффиксом _CONGU, создавая затем прокси-методы с оригинальными именами методов, которые будут вызывать свои аналоги _CONGU.

Например, если класс C содержит метод int m() { return 1; }, то инструментированный класс C будет иметь метод int m_CONGU() { return 1; } и метод int m() { return m_CONGU(); }.

Позже я добавлю дополнительную логику в int m(), которая будет выполнять некоторые проверки перед вызовом m_CONGU().

В настоящее время я занимаюсь инструментацией всех вызовов конструктора к моему методу с суффиксом _CONGU.

Ниже показаны инструментированная и неинструментированная версии метода inverse() класса Fraction. enter image description here

При попытке запустить этот код

Fraction fraction = new Fraction(4, 1);

я получаю следующее исключение, которое не дает мне покоя последние пару часов:

Exception in thread "main" java.lang.VerifyError: (class: jorgeTestes/system/fraction/Fraction, метод: inverse_CONGU signature: ()LjorgeTestes/system/fraction/Fraction;) Ожидая найти объект/массив на стеке в jorgeTestes.system.fraction.XyzTest.main(XyzTest.java:9)

Наверное, это очевидная ошибка, но я не могу понять, в чем может быть проблема. Похоже, что это как-то связано с неправильным количеством данных в стеке, но мне кажется, что количество элементов в стеке одинаково и в оригинальном, и в инструментированном коде (по крайней мере, так должно быть). Есть идеи?

Немного дополнительной информации:

1) вот дескрипторы обоих и Fraction_CONGU (которые одинаковы, как и следовало ожидать!): enter image description here

2) Мне интересно, может ли цвет [0] Code быть другим в Bytecode Viewer означать, что есть какая-то другая проблема с моим инструментированным кодом? Может быть, есть какие-то метаданные, которые нарушаются в процессе, и это может быть причиной того, что код выглядит нормально, но при попытке запустить код все равно возникает проблема?

5
задан devoured elysium 21 December 2011 в 21:26
поделиться