В моем приложении asp.net, если приложение выдает исключение, оно перехватывается и обрабатывается 500 страниц.Я хотел бы сломать отладчик на месте броска.В настоящее время я использую следующий фрагмент кода:
void ExceptionHandler(Exception ex) {
if (Debugger.IsAttached)
{
Debugger.Break();
}}
Однако этот код прерывается на ExceptionHandler
, а не на месте броска.Как я могу разорвать в месте выброса?
Я не хочу изменять настройки исключений, потому что я хочу разбивать на исключения, которые достигли ExceptionHandler
, а не на исключения, восстановленные системой.
Чтобы лучше проиллюстрировать мою проблему:
class Server // Server owned by third party
{
static void Main(string[] args)
{
AppDomain.CurrentDomain.FirstChanceException += (source, e) =>
{
// This does not help, because there are legit exceptions
Console.WriteLine("FirstChanceException event raised in {0}: \"{1}\"",
AppDomain.CurrentDomain.FriendlyName, e.Exception.Message);
};
AppDomain.CurrentDomain.UnhandledException += (source, e) =>
{
// This does not help, because exception should be handled by server, otherwise it would shut down
Console.WriteLine("UnhandledException event raised in {0}: \"{1}\"",
AppDomain.CurrentDomain.FriendlyName, e.ExceptionObject);
};
var app = new Application();
while (true)
{
try
{
app.ProcessRequest();
}
catch (Exception e)
{
// If we get here this mean that something is wrong with application
// Let's break on line marked as #1
Console.WriteLine("Server swallowed an exception \"{0}\"", e.Message);
Debugger.Break(); // Debugger breaks, but no exception dialog, and stack trace in method main
}
}
}
}
class Application
{
public void ProcessRequest()
{
try
{
Console.WriteLine("Doing stuff");
throw new InvalidOperationException("Legit exception handled by application");
}
catch (InvalidOperationException ex)
{
Console.WriteLine("Application handled exception \"{0}\"", ex.Message);
}
throw new InvalidOperationException("Unhandled exception"); // #1. Something is wrong here
}
}
Вывод программы:
Doing stuff
FirstChanceException event raised in ExceptionTest: "Legit exception handled by application"
Application handled exception "Legit exception handled by application"
FirstChanceException event raised in ExceptionTest: "Unhandled exception"
Server swallowed an exception "Unhandled exception"