如何在 .NET 应用程序中捕获所有异常/崩溃 [英] How to catch ALL exceptions/crashes in a .NET app

查看:23
本文介绍了如何在 .NET 应用程序中捕获所有异常/崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

可能的重复:
.NET - 最好的方法是什么实现捕获所有异常处理程序"

我有一个 .NET 控制台应用程序崩溃并向用户显示一条消息.我的所有代码都在 try{} catch(Exception e){} 块中,但偶尔仍会显示错误.

I have a .NET console app app that is crashing and displaying a message to the user. All of my code is in a try{<code>} catch(Exception e){<stuff>} block, but still errors are occasionally displayed.

在 Win32 应用程序中,您可以通过安装各种异常处理程序来捕获所有可能的异常/崩溃:

In a Win32 app, you can capture all possible exceptions/crashes by installing various exception handlers:

/* C++ exc handlers */
_set_se_translator
SetUnhandledExceptionFilter
_set_purecall_handler
set_terminate
set_unexpected
_set_invalid_parameter_handler

.NET 世界中的等价物是什么,以便我可以处理/记录/安静所有可能的错误情况?

What is the equivalent in the .NET world so I can handle/log/quiet all possible error cases?

推荐答案

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

Contrary to what some others have posted, there's nothing wrong catching all exceptions. The important thing is to handle them all appropriately. If you have a stack overflow or out of memory condition, the app should shut down for them. Also, keep in mind that OOM conditions can prevent your exception handler from running correctly. For example, if your exception handler displays a dialog with the exception message, if you're out of memory, there may not be enough left for the dialog display. Best to log it and shut down immediately.

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

As others mentioned, there are the UnhandledException and ThreadException events that you can handle to collection exceptions that might otherwise get missed. Then simply throw an exception handler around your main loop (assuming a winforms app).

此外,您应该知道 OutOfMemoryExceptions 并不总是因内存不足而引发.OOM 条件可以在您的代码或框架中触发各种异常,这些异常不一定与真正的基础条件内存不足这一事实有关.当根本原因实际上是内存不足时,我经常看到 InvalidOperationException 或 ArgumentException.

Also, you should be aware that OutOfMemoryExceptions aren't always thrown for out of memory conditions. An OOM condition can trigger all sorts of exceptions, in your code, or in the framework, that don't necessarily have anything to do with the fact that the real underlying condition is out of memory. I've frequently seen InvalidOperationException or ArgumentException when the underlying cause is actually out of memory.

这篇关于如何在 .NET 应用程序中捕获所有异常/崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆