web-dev-qa-db-ja.com

例外が発生した後、VisualStudioデバッガーで続行する

C#プログラムをデバッグし、例外がスローされると(コードによってスローされるORフレームワークによってスローされる))、IDEが停止し、私のコードの対応する行。

今のところすべてが順調です。

次に「F5」を押して続行します。この瞬間から、私が無限ループにいるように継ぎ目があります。 IDE常に例外行に戻る必要があります。 ShiftF5 (デバッグを停止/プログラムを終了します)彼から抜け出します。

私はここで何人かの同僚と話をしました、そして彼らはこれが彼らにもいつか起こると私に言いました。

何が起こっていますか?

45
vIceBerg

これは、例外が処理されず、Visual Studioは、何らかの方法で処理されない限り、その行を超えて移動できないためです。簡単に言えば、それは仕様によるものです。

実行できることの1つは、実行ポイント(黄色の線/矢印)をコード内の前のポイントにドラッグアンドドロップし、(Visual Studioウォッチウィンドウを使用して)メモリ内の値を変更して、例外が発生しないようにすることです。次に、コードのステップ実行を再開します1

ただし、実行を停止して例外の原因となっている問題を修正するか、スローが望ましくない場合は例外を適切に処理することをお勧めします。

1 基本的に一部のコードを再実行している(実行を巻き戻さない)ため、これは意図しない結果をもたらす可能性があります。

17
Eric Schoonover

VisualStudioでオプション "未処理の例外でコールスタックをアンワインド"がチェックされている可能性があります。このオプションがオンの場合、Visual Studioは例外の直前に巻き戻されるため、 F5 同じ例外に突っ込み続けます。

オプションのチェックを外すと、Visual Studioは例外で壊れますが、 F5 その線を越えて進みます。

このオプションはメニューの下にありますツールオプションデバッグ一般

47
Matt Woodard

IDEが問題のあるコード行で中断すると、例外を生成した行を実行する直前に停止します。続行すると、その行が再度実行され、例外が再度発生します。

エラーを過ぎて何が起こったかを確認したい場合は、エラーが発生していなければ、黄色で強調表示された行(次に実行される行)を問題のあるコードの次の行にドラッグできます。もちろん、問題のある行が何をしなかったかによっては、プログラムが他のエラーを引き起こす状態になっている可能性があります。その場合は、あまり役に立たないので、例外が発生するようにコードを修正する必要があります。発生しない、または適切に処理されます。

4
Joel Mueller

例外が発生すると、Visual Studio(または使用している可能性のあるIDE)は、コードで例外が処理されない限り、それ以上進むことはできません。

この動作は仕様によるものです。

3
Peter Hession

キャッチされない例外はアプリをダウンさせます。これの代わりに、VSはキャッチされない例外を維持します。アプリを終了するか、逆巻きする必要があります。

2
Mark Brackett