2013-06-21 1 views
-1

Я боролся с этой проблемой в течение нескольких дней, но пока не получил правильного ответа.Собственный агент 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)

ответ

0

В конце концов я нашел ответ на свой вопрос, у меня было неправильное имя метода ('Agent_Attach') в файле Agent.cpp, правильным должно быть «Agent_OnAttach», с этим исправлением, Теперь мой агент lib (.dll) можно загрузить в исполняемую программу Java.