1

在为 ASP.NET 编写代码时,在附加调试器的情况下,如果您访问引发异常的网页,则会在导致异常的代码行处启动未处理的异常帮助程序。

即使您只捕获未处理的异常并且没有捕获抛出的异常,也会发生这种情况。但是,按 F5、忽略异常或未附加调试器不会导致 AppDomain 被拆除。相反,ASP.NET 无论如何都会处理未处理的异常。

这是如何工作的,并且可以在其他地方实现这样的异常处理,以便可以吞下其他未处理的异常而不是杀死整个 AppDomain 或进程?

编辑:为了澄清,我了解异常处理和 try...catch 块是如何工作的。但是,在这种情况下,调试器似乎正在考虑未处理的异常,同时 ASP.NET 正在将异常包装在 try...catch 中。这就是我想要效仿的行为。

4

2 回答 2

2

这是如何运作的,

只是将执行代码包装在他们想要的任何异常处理代码中。asp.net 网页(或视图,或控制器)只是一个类,如何使用它完全取决于主机(在我们的例子中是 asp.net)。

如果处理它,为什么VS调试器会中断它?

MSDN 文档中引用了一段话:

ASP.NET 有一个顶级异常处理程序,它处理异常以向浏览器用户显示错误页面。除非打开了“仅我的代码”,否则该顶级异常处理程序将阻止未处理的异常闯入调试器。确保为 ASP.NET 调试启用“仅我的代码”。

这意味着如果您在 VS 调试选项中启用了“仅我的代码”(并且默认情况下启用),您将在您自己的代码中未处理的异常处中断,无论它们是否在您的调用者中处理。

可以在其他地方实现这样的异常处理,以便可以吞下其他未处理的异常而不是杀死整个 AppDomain 或进程?

你不能这样做,这是一种安全措施。

于 2012-07-28T11:36:20.527 回答
1

您的网页只是来自 IIS 和 ASP.NET 运行时的一堆方法调用,您的网页并不是在您的 appdomain 中单独运行。调用您的代码的代码在该方法调用周围有一个普通的 try/catch 块。

您可以自己创建类似的设置:

这类程序的问题是:您应该在应用程序的哪个位置继续?

最后一个问题在 ASP.NET 中很容易解决,因为每个页面调用都是相互隔离的。用户只需再次导航到页面继续。

于 2012-07-28T11:50:24.480 回答