【发布时间】:2013-06-18 02:52:09
【问题描述】:
我在这个问题上挣扎了几天,但还没有得到正确的答案。
问题描述如下: 我编写了一个普通的 Java 程序 (Program-A),并使用 Agent_OnLoad、Agent_OnAttach、Agent_OnUnload 方法编写了基于 Windows 的本机代理(*.dll,用 C/C++ 编写),如果使用 Java 命令行标志 (-agentlib)。然后我编写了另一个 Java 程序,将本机代理附加到正在运行的 Java Program-A 上(请参阅下面的 VM attach 和 loadAgentPath 代码片段),但是我得到了异常:
com.sun.tools.attach.AgentLoadException: Failed to load agent library
我试图以这种或那种方式更改 agentPath(绝对或相对文件路径),但这些都不起作用。我是否应该尝试其他方法来完成这项工作。我需要将本机代理附加到正在运行的 java 程序上,而不是使用命令行标志。
有没有人知道根本原因或解决办法的线索?
顺便说一句,运行附加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 运行时环境(内部版本 1.7.0-b147)
【问题讨论】: