次の単純なコンソール アプリケーションについて考えてみましょう。
using System;
namespace Demo
{
class Program
{
static void Main(string[] args)
{
throw new Exception();
}
}
}
これを Visual Studio 2010 または Visual Studio 2012 Beta のデバッガーで実行します。
そうすると、当然、デバッガーは例外で停止します。わかりました。
しかし、F5 キーを押して続行 (または [Debug]、[Continue] の順に選択) すると、同じ例外で再び停止します。プログラムを終了するには、デバッグを停止する必要があります。F5 を押したときにプログラムが終了することを期待していました。
なぜそれがそのように振る舞うのか誰かが知っていますか?
[編集]
返信を回答としてマークしましたが、デバッガーの動作の奇妙な結果を確認するには、次のコードを検討してください。
using System;
namespace Demo
{
class Program
{
static void Main(string[] args)
{
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
throw new Exception();
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Console.WriteLine("Unhandled Exception.");
}
}
}
これをデバッガーで実行し、F5 キーを何度も押してから、出力を確認します。コードが実際にスローするのは 1 回だけですが、多くの「未処理の例外」メッセージが表示されます。デバッガーが原因で例外が複数回スローされています! これは私が奇妙に思うことです。