一尘不染

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

c#

这个问题已经在这里有了答案

7年前关闭。

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

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

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

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

.NET世界中等效的东西是什么,因此我可以处理/记录/安静所有可能的错误情况?


阅读 527

收藏
2020-05-19

共1个答案

一尘不染

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

就像其他人提到的那样,您可以处理UnhandledException和ThreadException事件,以收集可能会错过的异常。然后只需在您的主循环中抛出一个异常处理程序(假设有一个winforms应用程序)。

另外,您应该注意,并非总是因内存不足而抛出OutOfMemoryExceptions。一个OOM条件可以触发代码中或框架中的各种异常,这些异常与真正的基础条件已耗尽内存这一事实没有任何关系。当根本原因实际上是内存不足时,我经常会看到InvalidOperationException或ArgumentException。

2020-05-19