繁体   English   中英

如果我没有处理我的.NET代码可能抛出的一些未经检查的异常,我怎么知道呢?

[英]How would I know if I haven't handled some unchecked exceptions that my .NET code could throw?

在.NET中,方法签名不会告诉我是否错过了处理我的代码可能抛出的一些异常。 是否有一些工具可以警告我,如果说我正在使用HashTable删除但是没有处理ArgumentNullException? 我不想在运行时感到惊讶。

这是否意味着您需要非常了解您的代码,否则未经检查的异常可能更难以使用?

实际上,通过终止程序来处理意外异常是处理这种情况的最佳方法,因为通常情况下,当意外发生时程序状态是未定义的。 如果您记录所有异常,并且具有一组不错的验收测试,则可以消除由于程序流而导致的意外异常引起的问题。

通过检查方法输入,类的单元测试和理解框架来进行防御性编程将使大多数例外情况得到预期。

对于Windows应用程序:

AppDomain currentDomain = default(AppDomain);
currentDomain = AppDomain.CurrentDomain;
// Handler for unhandled exceptions.
currentDomain.UnhandledException += UnhandledExceptionHandler;
// Handler for exceptions in threads behind forms.
Application.ThreadException += ThreadExceptionHandler;

public static void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs e)
{
}

public static void ThreadExceptionHandler(object sender, Threading.ThreadExceptionEventArgs e)
{
}

您试图完成的任务没有语言支持。 我们为VS编写了一个海关插件,以确保我们的API的所有入口点都尝试捕获日志记录。 但是,我从未在语言中看到过强迫您覆盖所有可能声明的异常情况的语言,因为您仍然需要编写一些代码来对错误做一些有意义的事情。 大多数人只是看看编译器抱怨编写处理程序并隐藏在某些无用代码中可能有用的错误。 在某些情况下,最好失败并知道存在问题。

您应该为应用程序添加最高级别的异常处理程序,并为您的应用程序编写单元,功能和集成测试,这将测试所有可能的用例。 这将帮助您消除几乎所有未经检查的异常。

也尽量不捕捉异常,但消除原因。 (即不捕获ArgumentNullException但不传递null

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM