5

Javaアプリケーションによってロードされていないdllをデバッグするにはどうすればよいですか。

シナリオは次のとおりです。私のJavaアプリは、別のdllを使用しているjni.dllをロードしており、そのdllは別のdllを使用しています。

java <-> jni.dll <-> dll <-> dll

すべてのモジュールのソースコードがあります

jni.dllをデバッグするときにVisualStudioExpressを使用していますが、他のdllをデバッグできるようにするにはどうすればよいですか?

4

5 に答える 5

8

しかし、これは同じです。

私も同じことをしているので、ワーキングセットについて説明しましょう。

私は Eclipse 3.1 と Visual C++ 2003 7.1.3088 (ドイツ語... 申し訳ありません;)) と Windows XP を使用しています。私はsome_jni.dllとsome.dllをJavaにロードし、jniクラスを使用しています。some.dll は内部の other.dll をロードします。Visual Studio で some.dll と other.dll をデバッグできます。

アプリケーションを起動し、最初の jni クラス呼び出しにブレークポイントを設定します。VS を開き、(ドイツ語で) "Debuggen" (デバッグ) -> "Prozesse" (プロセス) に移動します。javaw.exe が表示されます。

javaw.exe を選択し、「Anfügen」(アタッチ) を押します。

思い出すと、ブレークポイントが配置されている C++ のコード ページは VS で開く必要があります。ブレークポイントが自動的にヒットすると、VS はページを開きません。dll が読み込まれ、ブレークポイントを配置したコード行が実行されると、VS のデバッガーはこの位置で停止します。注意: これは、デバッグする dll をデバッグ オプションでコンパイルするときにのみ発生します!!! そうしないと、デバッガーは C++ ブレークポイントで停止しません。

半年前にこれを行いましたが、これは正しい手順のはずです。

あなたがそれを手に入れることを願っています。

于 2008-12-12T07:10:50.363 に答える
1

Visual Studio では、デバッガーを実行中の Java プロセスに適応させることができます。C++ コードのブレークポイントに到達すると、デバッガーはこれを Visual Studio に表示し、プロセスを停止します。

現時点では、ビジュアル スタジオはインストールされていませんが、デバッグ オプションには、実行中のすべてのプロセスを表示できるウィンドウがあります。Java プロセスを探して、そのプロセスをデバッグ セッションに追加します。

dll がブレークポイントが配置されている行を実行すると、それが表示されます。

編集: リリース モードではなく、デバッグ情報を使用してコンパイルする必要がある dll。そうしないと、Visual Studio のデバッガーがブレークポイントで停止しません。

于 2008-12-11T17:38:13.453 に答える
0

大まかな方法​​の1つは、デバッグするdllに無限ループを作成することです。

int x = 1;
while(x);

Javaアプリケーションがこのループに入ると、デバッガーを介してこのプロセスに接続し、の値を設定しx0ループを解除します。これで、デバッガーを使用してステップスルーできます。

于 2010-02-06T02:33:19.037 に答える
0

私が最後にこれを行ってから長い時間が経ちましたが、それでもLinuxとSolarisでした。不完全な解決策は、DLLに「ハードコードされたブレークポイント」を「」で埋め込むことです_asm int 3;

Windowsがこの命令を実行するときはいつでも、デスクトップユーザーに適切に構成されたデバッガーを問題のあるプロセスに接続する機会を与えます。

既知のプロセスIDにデバッガーを向けるほどスムーズではありませんが、うまくいくはずです。

M。

于 2008-12-11T16:22:48.517 に答える
0

別の方法として、IKVMを試してください。http://www.ikvm.net/

于 2009-05-13T05:17:24.950 に答える