デバッガーが .NET プロセスにアタッチされると、未処理の例外がスローされると (通常は) 停止します。
ただし、メソッド内ではこれは機能しないようですasync
。
これまでに試したシナリオは次のコードにリストされています。
class Program
{
static void Main()
{
// Debugger stopps correctly
Task.Run(() => SyncOp());
// Debugger doesn't stop
Task.Run(async () => SyncOp());
// Debugger doesn't stop
Task.Run((Func<Task>)AsyncTaskOp);
// Debugger stops on "Wait()" with "AggregateException"
Task.Run(() => AsyncTaskOp().Wait());
// Throws "Exceptions was unhandled by user code" on "await"
Task.Run(() => AsyncVoidOp());
Thread.Sleep(2000);
}
static void SyncOp()
{
throw new Exception("Exception in sync method");
}
async static void AsyncVoidOp()
{
await AsyncTaskOp();
}
async static Task AsyncTaskOp()
{
await Task.Delay(300);
throw new Exception("Exception in async method");
}
}
何か見落としているのでしょうか? 例外が発生したときにデバッガーを中断/停止させるにはどうすればよいですかAsyncTaskOp()
?
ベストアンサー1
メニューの下でDebug
、 を選択しますExceptions...
。例外ダイアログで、Common Language Runtime Exceptions
行の横にあるボックスをオンにしますThrown
。
VS2022 の場合...「デバッグ」「Windows」「例外設定」を選択し、 のすぐ左にあるボックスをオンにしますCommon Language Runtime Exceptions
。