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

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

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

java -agentpath:<pathToAgent> <calledJavaProgram>

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

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

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

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

1 Ответ

0 голосов
/ 16 апреля 2012

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

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

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