Я боролся с этой проблемой в течение нескольких дней, но пока не получил правильного ответа.Собственный агент JVMTI (DLL) не может быть загружен в исполняемую Java-программу - AgentLoadException
Вот описание проблемы: Я написал обычную программу Java (Программа-A), и написал под управлением Windows на основе родной агент (* .dll, написанный на C/C++) с Agent_OnLoad, Agent_OnAttach, Agent_OnUnload метод, который отлично работает, если используется флаг командной строки Java (-agentlib). Тогда я написал еще одну программу Java, чтобы прикрепить нативный агент на запущенные Java-программы-A (см ниже кусок кода для VM прикрепиться и loadAgentPath), однако я получил исключение:
com.sun.tools.attach.AgentLoadException: Failed to load agent library
Я попытался изменить agentPath (абсолютный или относительный путь к файлу) так или иначе, ни одно из этих действий не работает. Должен ли я попробовать другой способ сделать эту работу. Мне нужно подключить собственный агент к исполняемой java-программе, а не использовать флаг командной строки.
Кто-нибудь знает причину или ключ к решению?
BTW, командная строка для запуска присоединять VM Java код, как:
java -Djava.library.path=D:\DevTools\Java7\jre7\bin -classpath .;./tools.jar com.xxx.TestAgentVMAttacher
...
VirtualMachine virtualMachine = com.sun.tools.attach.VirtualMachine.attach(pid); // Note: this code line is executed normally, I am sure the pid is correct
...
agentPath = theFilePath + "/myagent.dll"; // Note: I am sure the dll file path is correct
virtualMachine.loadAgentPath(agentPath,null); // Note: this code line would cause the exception (AgentLoadException) as I mentioned above, no matter how I set the agentPath, even I set it as null, same exception happened.
окружающей среды, связанные информация:
- ОС: Windows XP - Java Версия: Java (TM) SE Runtime Environment (build 1.7.0-b147)