2013-06-21 16 views
-1

我在这个问题上挣扎了几天,但没有得到正确的答案。JVMTI本地代理(DLL)无法加载到正在运行的Java程序 - AgentLoadException

下面是问题描述: 我写了一个普通的Java程序(Program-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程序上,而不是使用命令行标志。

有谁知道解决方案的根本原因或线索?

顺便说一句,在命令行中运行连接虚拟机的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版本:爪哇(TM)SE运行时环境( build 1.7.0-b147)

回答

0

最终我找到了我的问题的答案,我在Agent.cpp文件中有一个错误的方法名('Agent_Attach'),正确的应该是'Agent_OnAttach'我的代理lib(.dll)现在可以加载到正在运行的Java程序中。

相关问题