このページでは、
混合言語のデバッグに関する制限、およびそれらの制限に対処する際の推奨メソッドについて説明します。製品の
README も参照してください。このデバッガーについて追加の制限が記載されている可能性があります。
- フレームにドロップおよびホット・コード置換:
Java
から呼び出した他の言語をデバッグする間は、フレームにドロップおよびホット・コード置換フィーチャーを使用しないでください。
- Java ブレークポイントのあるすべてのスレッドの中断:
混合言語アプリケーションをデバッグする際は、すべてのスレッドを中断するように
Java ブレークポイントを設定しないでください。
- ステップオーバーおよびステップ・リターン: ステップオーバーおよびステップ・リターンがサポートされるのは、上部スタック・フレームの場合のみです。
- 中断: 「中断」は、混合言語アプリケーションのデバッグ時に正しく機能しないことがあります。
代わりにブレークポイントを使用してください。
- 論理構造体変数のラベルがない: 時折、論理構造体変数の名前や値がブランクになることがあります。
次のステップまたは再開操作が完了した後は、ラベルが正しくなっている必要があります。
- 「変数」ビューの更新が停止した、変数が表示されない:「変数」ビューの更新が停止したか、変数がまったく表示されない場合には、「変数」ビューを閉じて再び開き、変数が正しく表示されるようにします。
- ステップ・リターンが予期しない位置で停止する: ステップ・リターン・アクションがユーザー・コードへ戻らずにランタイム・コードの中で停止した場合は、予想したソース・コードで停止するまでステップ・リターンを続行します。
ホット・メソッド置換
- クラスの形状 に影響を与えるソースへの変更はサポートされません。
メソッド本文への変更はホット・メソッドで置換されますが、以下は置換されない変更の例です。
- メソッドの削除/追加などのクラス構造への変更、および既存のメソッドのシグニチャーへの変更
- クラス変数の変更
- インナー・クラスへの変更
フィールドまたはメソッドを追加または削除してクラスの形状を変更した場合、または上記のような変更をした場合は、「スキーム変更は実装されていません」というメッセージとともに、次の画像のようなエラーが表示されることがあります。
このエラーは、サポートされないホット・コード置換が行われたために、仮想マシンは変更を処理しなかったことを示しています。
デバッグ・ビューのスタック・フレームまたはスレッドに、「(同期がとれていません)」というメッセージが表示されることもあります。
これらのメッセージは、サポートされない変更を元に戻すと表示されなくなります。
- 下部スタック・フレームのコードへの変更 (main(...) メソッド) はホット置換できません。
- ネイティブ・メソッドが直接参照するコードへの変更は、ホット置換できません。
デバッグ・ビューでは、スタックのすべてのネイティブ・メソッドのスタック・フレームに、次のスクリーン・ショットのように、「[ネイティブ・メソッド]」という表記が付加されます。
例えば、methodB から呼び出される methodA でデバッガーが現在中断していて、methodA の本体の変更を行うとします。
methodB がネイティブ・メソッドの場合、ホット・コード置換は成功しません。このようなメソッドで中断している間は、リフレクションを介して呼び出されるメソッドを置換することはできません。
リフレクションを介して呼び出されるメソッドの例としては、Class.newInstance() および Method.invoke() を介して呼び出されるコンストラクターなどがあります。
ネイティブ・コードでデバッガーが中断している間に、そのネイティブ・コードによって呼び出されるメソッドの本体を変更すると、次のような「スタック上の廃止メソッド」というタイトルのエラー・ダイアログが表示されることがあります。
(前の例の続き) methodA が変更されたため、変更前の元の methodA はもう廃止されています。
ただし、仮想マシンは新しい methodA を実行できません。このメソッドはネイティブ・メソッドから呼び出されるからです。そのため、仮想マシンは、methodA のもう廃止されている古い内容を使い続けることになります。
- JSP ページ・デバッグは、
Java
コードのホット・メソッド置換をサポートしません。