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

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

问题描述


可能重复:

.net - 实现捕获所有异常处理程序的最佳方法

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

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天全站免登陆