この問題に数日間苦労しましたが、まだ正しい答えが得られませんでした。
問題の説明は次のとおりです。 通常の Java プログラム (プログラム A)を作成し、Agent_OnLoad、Agent_OnAttach、Agent_OnUnload メソッドを使用して Windows ベースのネイティブ エージェント(*.dll、C/C++ で作成) を作成しました。 Java コマンドライン フラグ (-agentlib)。次に、別の Java プログラムを作成して、実行中の Java Program-A にネイティブ エージェントをアタッチしましたが (VM アタッチと loadAgentPath については、以下のコードを参照)、例外が発生しました。
com.sun.tools.attach.AgentLoadException: Failed to load agent library
これまたはその方法でagentPath(絶対または相対ファイルパス)を変更しようとしましたが、これらのどれも機能しません。これを機能させるには、他の方法を試す必要があります。私が必要としているのは、コマンドライン フラグを使用するのではなく、実行中の Java プログラムにネイティブ エージェントをアタッチすることです。
根本的な原因または解決策の手がかりを知っている人はいますか?
ところで、attach 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.
環境関連情報:
- OS: Windows XP - Java バージョン: Java(TM) SE ランタイム環境 (ビルド 1.7.0-b147)