问题描述
可能重复:
.NET - 什么是实现捕获所有异常处理程序的最佳途径
我有一个.NET控制台应用程序的应用程序,崩溃,并显示一条消息给用户。我所有的code是在尝试{< code取代;}赶上(例外五){<东西>}
块,但仍然错误偶尔也会显示出来。
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条件prevent异常处理程序无法正常运行。例如,如果您的异常处理程序显示,除了消息的对话框,如果你的内存不足,可能没有足够的留给对话框显示。最好记录,并立即关闭。
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条件可以触发各种异常,在code,或在框架中,不一定有什么关系的事实,真正的根本条件是内存不足。我经常看到出现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应用程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!