JVMTI получает имя вызываемого класса/файла

Я попытался прочитать всю документацию по jvmti и не нашел решения своей проблемы.

Я хочу получить имя класса/файла, которое используется в командной строке для вызова программы:

java -agentpath:<pathToAgent> <calledJavaProgram>

В верхнем регистре я хочу получить имя ‹ с именем JavaProgram >.

GetSourceFileName(jclass klass,...) получает мне только имя "класса", которое установлено в списке параметров, но с тех пор, как я запустил программу, я даже не знаю этого... верно?

Существуют ли (другие) способы получить это имя?

Спасибо за вашу помощь, Маркус Г.


person Markus G.    schedule 12.08.2011    source источник
comment
Я выяснил, что JNI.h предлагает структуру с именем JavaVMInitArgs, которая используется для создания новой JVM с агентом. Но мне нужно получить именно ту информацию для текущего запущенного jvm, с которым я запускал агент... есть идеи?   -  person Markus G.    schedule 26.08.2011


Ответы (1)


Согласно документации JNI, структура JavaVMInitArgs предназначена для создания новые виртуальные машины из собственного кода, поэтому я думаю, что это отвлекающий маневр. Насколько мне известно, ни в JVMTI, ни в Java нет доступа к API для аргументов командной строки.

Есть несколько вещей, которые вы можете сделать, чтобы узнать имя класса с помощью основного метода:

  1. Используйте JNI для вызова метода Java, который обрабатывает его.
  2. Используйте BCI, чтобы изменить все основные методы и выполнить обратный вызов JNI для вашего агента, первый вызов будет тот, который вам нужен. Это также позволяет вам получить массив args[].
person Stephen Nelson    schedule 15.04.2012