実行スタックからフレームを戻す

デバッグ中にPopFrame機能を使用すると、前の実行ポイントに戻ることができます。 PopFrameをHotSwapとともに使用すると、再開時に新しいクラス定義を使用できます。 PopFrameは、Java 2 SDK v1.4のJava Platform Debugger Architecture(JPDA)の拡張機能で、JDeveloperのJava Virtual Machine(OJVM)に実装されています。

デバッガの一時停止中に、スタックからフレームを戻してクラスを再定義できます。 コードがホットスワップされた後にデバッガが再開すると、古いメソッド定義を現在実行しているスレッドは、そのメソッドが戻るまで実行を続行します。 後続のメソッド・コールでは、新しい定義が使用されます。 古いメソッドのフレームを戻すことによって、スレッドで新しいクラス定義が使用されます。 ただし、前の実行による副次的効果は元に戻らず、クラスの既存のインスタンスは変更されません。さらに、クラス変数もリセットされません。 クラス・メソッドのロジックを変更するには、HotSwapを使用してください。 フィールドやメソッドの追加または削除など大幅な変更を行う場合は、ほとんどの場合、HotSwapは使用できません。

実行スタック内のフレームは、メソッドを起動します。 PopFrameを使用すると、ネイティブ・メソッドのコールではなく、ネイティブ・メソッドのコールにも先行していないフレームから実行を再開できます。 PopFrameはメソッドを再起動しますが、そのメソッドに渡された引数は再評価しません。 引数を再評価するには、スタック内のさらに深い階層のフレームに戻る必要があります。

HotSwapの使用後に実行スタックからフレームを戻すには、次のようにします。

  1. ブレークポイントを設定し、実行がそのブレークポイントに達するまで待機して、デバッガを停止します。

    ナビゲータ・ウィンドウの「スタック」ペインに、実行スタックの現在の状態が表示されます。

  2. 変更するクラスのソース・コードを編集します。

  3. 次の手順でクラスを再コンパイルします。 「実行」->「メイク<クラス名>」を選択します。

    デバッガのログ・ウィンドウに、再定義が正常に終了したかどうかを示すメッセージが表示されます。

  4. 実行スタック内の項目を右クリックし、「ここに戻る」を選択します。

  5. コード表示が変更されて、新しい実行ポイントが示されます。

  6. デバッガのツールバーで resume_icon をクリックして、実行を再開します。

    新しいクラス定義を使用して実行が再開されます。


Javaプログラムのデバッグ
デバッグ時のクラスの再定義

 

Copyright © 1997, 2004, Oracle. All rights reserved.