当前位置:  开发笔记 > 编程语言 > 正文

如何捕获.NET应用程序中的所有异常/崩溃

如何解决《如何捕获.NET应用程序中的所有异常/崩溃》经验,为你挑选了5个好方法。

您可以向AppDomain.UnhandledException事件添加事件处理程序,并在抛出异常并且未捕获异常时调用它.



1> Juanma..:

您可以向AppDomain.UnhandledException事件添加事件处理程序,并在抛出异常并且未捕获异常时调用它.


设置AppDomain.UnhandledException似乎与调用Win32 SetUnhandledExceptionFilter完全一样.如果您的应用的另一部分已安装过滤器,AppDomain.UnhandledException将正确"链接"并调用另一个过滤器.

2> 小智..:

与其他人发布的内容相反,捕获所有异常并没有错.重要的是要妥善处理它们.如果您有堆栈溢出或内存不足的情况,应该关闭应用程序.此外,请记住,OOM条件可以防止您的异常处理程序正常运行.例如,如果异常处理程序显示带有异常消息的对话框,则如果内存不足,则可能没有足够的空间用于对话框显示.最好记录并立即关闭.

正如其他人所提到的,您可以处理可能会错过的集合异常的UnhandledException和ThreadException事件.然后简单地在主循环周围抛出一个异常处理程序(假设一个winforms应用程序).

此外,您应该知道,对于内存不足的情况,并不总是抛出OutOfMemoryExceptions.OOM条件可以触发代码或框架中的各种异常,这些异常不一定与真实基础条件内存不足有关.当底层原因实际上没有内存时,我经常看到InvalidOperationException或ArgumentException.


我很惊讶没有更多的投票.然而,Juanma在捕获事件方面做了很好的补充,但并未涵盖所有场景.应该从中获取的信息是,有时可以打破标准.使用显式功能捕获特定的异常类型,并使用包装器来捕获和处理其他任何内容.如果您正在编写DLL,根据我的经验,您应该有一个继承自异常的类,创建您的功能,将未处理的异常包装在属性InnerException中并抛出.

3> Ricardo Amor..:

我们的主持人Jeff Atwood在codeproject中的这篇文章 就是您所需要的.包括用于捕获未处理异常的代码和用于向用户显示有关崩溃的信息的最佳实践.



4> Drejc..:

Global.asax中类是你的最后一道防线.看着:

protected void Application_Error(Object sender, EventArgs e)

方法


注意:此答案适用于ASP.NET应用程序而非控制台应用程序.

5> Peli..:

请注意,某些异常是危险的 - 或者大多数是无法捕获的,

OutOfMemoryException:您在catch处理程序中执行的任何操作都可能分配内存(在CLR的托管或非托管端),从而触发另一个OOM

StackOverflowException:根据CLR是否足够早地检测到它,您可能会收到通知.最糟糕的情况是,它只是杀死了这个过程.

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有