Podczas debugowania aplikacji konsoli Visual Studio utknie w pętli zgłaszania wyjątków. Czemu?
Rozważ tę prostą aplikację konsoli:
using System;
namespace Demo
{
class Program
{
static void Main(string[] args)
{
throw new Exception();
}
}
}
Używam tego pod debugerem w Visual Studio 2010 lub Visual Studio 2012 Beta.
Kiedy to robię, naturalnie debuger zatrzymuje się na wyjątku. Ok, jak dotąd.
Ale po naciśnięciu F5, aby kontynuować (lub wybrać Debuguj | Kontynuuj), ponownie zatrzymuje się na tym samym wyjątku. Muszę przestać debugować, aby program mógł wyjść. Spodziewałem się, że program wyjdzie po naciśnięciu F5.
Czy ktoś wie, dlaczego tak się zachowuje?
[EDYTOWAĆ]
Zaznaczyłem odpowiedź jako odpowiedź, ale aby zobaczyć dziwną konsekwencję zachowania debuggera, rozważ następujący kod:
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.");
}
}
}
Uruchom to pod debuggerem i naciśnij F5, ładuj razy, a następnie spójrz na wyjście. Zobaczysz wiele wiadomości „Nieobsługiwany wyjątek”, mimo że kod tylko raz go rzuca. Debuger powoduje wielokrotne wyrzucanie wyjątku! To jest dla mnie dziwne.