デバッガーで実行ポインターを移動して実行フローを変更する

デバッグ中に、手動で実行ポインターを移動して、次に実行されるステートメントを変更できます。 ポインターの移動は、既知のバグを含むコードをスキップするような状況で役立ち、より高度なデバッガーの機能です。

実行フローを変更する

デバッガーが一時停止しているとき、ソース コードまたは [逆アセンブル] ウィンドウの余白に表示される黄色の矢印は、次に実行されるステートメントの位置を示します。 この矢印を移動して、次のステートメントを変更できます。 コードをスキップしたり、前の行に戻ったりできます。

Animation that shows how to move the pointer.

Animation that shows how to move the pointer.

実行される次のステートメントを変更するには、デバッガーがブレーク モードである必要があります。 ソース コードまたは [逆アセンブル] ウィンドウで、黄色の矢印を別の行にドラッグするか、次に実行する行を右クリックして [次のステートメントの設定] を選択します。

プログラム カウンターは、新しい場所に直接ジャンプします。 前の実行ポイントから新しい実行ポイントまでの間の命令は実行されません。 ただし、実行ポイントを後方に移動した場合、その間の命令が元に戻されることはありません。

注意事項

  • 次のステートメントを別の関数やスコープに移動すると、一般に呼び出し履歴が破損し、実行時エラーや例外が発生する原因になります。 次のステートメントを別のスコープに移動すると、デバッガーによって警告が表示され、操作を取り消す機会が与えられます。
  • Visual Basic では、次のステートメントを別のスコープや関数に移動できません。
  • ネイティブ C++ でランタイム チェックを有効にしている場合、次のステートメントを設定すると、実行がメソッドの最後に到達したときに例外が発生する可能性があります。
  • エディット コンティニュが有効になっている場合、エディット コンティニュが即座に再マップできない編集が行われると、 [次のステートメントの設定] でエラーが発生します。 この状況は、たとえば catch ブロック内のコードを編集した場合に発生する可能性があります。 これが発生すると、その操作がサポートされていないことを知らせるエラー メッセージが表示されます。
  • マネージド コードでは、以下の場合、次のステートメントは移動できません。
    • 次のステートメントが現在のステートメントとは別のメソッドに含まれている場合。
    • デバッグが、Just-In-Time デバッグによって開始された場合。
    • 呼び出し履歴のアンワインドが行われている場合。
    • System.StackOverflowException 例外または System.Threading.ThreadAbortException 例外がスローされた場合。