【问题标题】:Finding Unhandled Exceptions - .NET查找未处理的异常 - .NET
【发布时间】:2011-11-25 10:40:23
【问题描述】:

我有一个相当大的 .NET 解决方案,它的异常处理能力很差。原作者的本意是好的,捕获特定类型的异常而不是基异常类,但是,这导致我无法计算抛出某种类型的异常但在任何地方都没有捕获到的地方,这使软件变得不可靠。如何执行代码分析以确定解决方案中可以抛出异常类型但未被捕获的位置?

【问题讨论】:

标签: c# visual-studio-2010 exception .net-4.0 analysis


【解决方案1】:

您可以添加一个全局异常处理程序来记录异常,包括堆栈跟踪,并为用户提供一个漂亮的错误对话框。您可以使用堆栈跟踪来识别代码中产生错误的位置并更好地处理这些场景。尽可能多地记录。

如何做到这一点取决于平台(WebForms、MVC、WinForms、WPF,...?)

此外,对整个代码库进行深入的代码审查,重点是错误处理,可能会在许多错误向用户显示为错误之前发现它们。

【讨论】:

  • 嗯,任何东西都比默认的未处理异常对话框(对于 Windows 应用程序)或 Web 应用程序的 YSOD 更好:-)
  • 除了记录,这就是我所做的。鉴于 EventLog、ETW 和 minidump,我真的不明白在 Windows 桌面应用程序中将错误记录到一个文件或多个文件。
  • @RitchMelton,记录并不一定很困难。使用 nlog-project.orglogging.apache.org/log4net/index.html 等库
  • @driis - log4net -meh! System.Diagnostics.Trace - 这并不难,只是有更好的选择。
【解决方案2】:

这就是我处理它们的方式。在Main 方法中的Program.cs 中,我设置了事件处理。之后,您将所需的代码放入这些事件中。

Application.ThreadException += Form1_UIThreadException;
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

编辑:这是针对非基于网络的应用程序。

【讨论】:

  • 假设 Windows 窗体是平台。
【解决方案3】:

任何未捕获的异常都未处理。好消息是您可以订阅 AppDomain.CurrentDomain.UnhandledException 事件。

这会处理任何抛出但未被捕获的异常。

如何执行代码分析以确定解决方案中的哪些位置 异常类型可以抛出但不被捕获?

像 StyleCop 这样的程序会突出显示可能的未处理异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 2023-03-07
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多