-1

この問題に数日間苦労しましたが、まだ正しい答えが得られませんでした。

問題の説明は次のとおりです。 通常の 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)

4

1 に答える 1

0

最終的に、質問に対する答えが見つかりました。Agent.cpp ファイルに間違ったメソッド名 ('Agent_Attach') がありました。正しい名前は 'Agent_OnAttach' である必要があります。この修正により、エージェント ライブラリ (.dll) を現在実行中の Java プログラム。

于 2013-07-02T04:14:12.177 に答える