Я думаю, что вы хотите получить доступ к параметрам произвольного метода, не зная заранее их содержания, если нет, не могли бы вы уточнить свой вопрос?
См. Документы JVMTI о локальных переменных .
Во-первых, вам нужно убедиться, что вы включили доступ к локальным переменным в своем списке возможностей. Затем выясните, какие параметры доступны, используя GetLocalVariableTable
. Возвращенная таблица будет содержать описание каждой локальной переменной в методе, включая параметры. Не забудьте Deallocate
когда закончите.
Вам необходимо выяснить, какие переменные являются параметрами. Вы можете сделать это, найдя текущий jlocation
и исключив локальные переменные, которые еще не доступны. Это не скажет вам порядок параметров, но скажет, какие локальные параметры являются параметрами. Вы, вероятно, можете предположить, что номер слота - правильный порядок.
Найдите текущий jlocation
, используя GetFrameLocation
, выполните итерацию по таблице локальных переменных, и для каждой локальной переменной, чья start_location
меньше или равна вашему текущему местоположению, добавьте номер слота и введите в свой список параметры.
Для каждого параметра вызовите соответствующий метод GetLocal{X}
в зависимости от его типа. Вам понадобится глубина вашего текущего кадра, которая у вас уже есть от GetFrameLocation
.
Это должно дать вам ваши параметры, но это будет медленно и сложно реализовать. Вам будет гораздо лучше следовать рекомендациям руководства о том, чтобы избегать обратных вызовов MethodEntry и использовать вместо этого инструментарий байт-кода (BCI).