1

Java コードと特定のネイティブ dll との相互作用をデバッグする必要があります。私は、windbg + sosex で .NET ネイティブの相互作用をデバッグした経験があります。

ただし、Java コール スタックを表示する windbg 拡張機能は存在しないようです。

また、jdk 6 のデバッグ ビルドが見つかりませんでした。

私はソースコードからjdk 6をコンパイルするのにそれほど必死ではありません(方法を知っていたとしても)。

では、私の質問は、Java コードとネイティブ DLL との相互作用をどのようにデバッグまたはプロファイリングするかということです。

4

1 に答える 1

1

私はjdbとwindbgの組み合わせを使用してこれを行いました。ネイティブ呼び出しの直前と直後にjdbを使用してJavaでbpを設定し、windbgを使用してネイティブ関数の開始時にbpを設定します。デバッガーは相手のことを知りませんし、知る必要もありません。Javaバイトコードフレームとネイティブフレームの両方でスタックトレースを取得することはできませんが、ネイティブ呼び出しの前後にJavaスタックを確認できるため、大した問題ではありません。

注:jvm(少なくとも1.5バージョン)は、通常の場合に例外を使用します。これは、ネイティブデバッガーで実行する場合に非常に苦痛です。幸いなことに、EIPはそれらすべてでほとんど同じであるため、次のようなものを使用しても無視できます。.if (@eip == <addr>) {gn}

于 2012-11-08T14:26:53.650 に答える