web-dev-qa-db-ja.com

IntellijでJavaデバッガーを使用する場合、「ドロップフレーム」とはどういう意味ですか?

私はIntellij 8内でJavaデバッガーを使用していましたが、「ドロップフレーム」というラベルの付いたボタンに気付きました。

84
benstpierre

アプリケーションの呼び出しスタックは、デバッガーで表示できます。 「ドロップフレーム」機能を使用すると、時間をさかのぼるという意味で、前のスタックフレームに「フォールバック」できます。これは、もう一度見たいクリティカルスポットを逃した場合に関数を再入力するのに役立ちます。

「スタックフレーム」という名前が示すように、グローバル状態に既に加えられた変更(静的変数、フィールド値の変更など)は元に戻されず、ローカル変数のみがリセットされます。これにより、最初にブレークポイントに至った実行パスとは異なる実行パスに至る可能性があります。これに注意する必要があります-アプリケーションまたは現在のスタックに至った特定の時間のかかるプロセスを再起動することなく、異なる実行パスを探索するのに便利な機能であるとよく考えます。デバッガーでも利用できる変数値の変更と組み合わせて、あらゆる種類の興味深いことを行うことができます。

もちろん、発生した可能性のある副作用があることに注意してください-e。 g。ネットワークトラフィック、ファイル操作、コンソール出力など-巻き戻すことはできません。

110

デバッガ内のドロップフレームは、現在のスタックフレームをポップし、呼び出し元のメソッドに制御を戻し、ローカル変数をリセットします。これは、関数を繰り返し実行するのに非常に役立ちますが、警告があります。フィールドの変更またはグローバルな状態の変更は残ります。

詳細情報を参照してください こちら

13
Jorge Ferreira

デバッガーを使用してスタックからフレームをドロップすると、基本的にアプリケーションの実行を「巻き戻し」て前の状態に戻すことができます。スタックフレーム外の変数は元に戻されません。

補足として、この機能はEclipseでは「ドロップtoフレーム」と呼ばれますが、同じ目的を果たします。

6
Dolph