2013-06-21 22 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程序中。

相關問題