C# 如何消除.NET Framework引发的异常

C# 如何消除.NET Framework引发的异常,c#,.net,exception,debug-symbols,C#,.net,Exception,Debug Symbols,在最近的一个项目中,我使用了大量的数据绑定和xml序列化。我正在使用C#/VS2008,并下载了.NET framework的符号信息,以帮助我进行调试 我正在开发的应用程序有一个全局的“捕获所有”异常处理程序,如果有任何未捕获的异常被抛出,它可以向用户显示更为直观的消息。我的问题是,当我打开异常->抛出,以便能够在异常被“全部捕获”捕获之前对其进行调试。在我看来,该框架抛出了许多未立即捕获的异常(例如在ReflectPropertyDescriptor中),因此我实际尝试调试的异常在噪音中丢失

在最近的一个项目中,我使用了大量的数据绑定和xml序列化。我正在使用C#/VS2008,并下载了.NET framework的符号信息,以帮助我进行调试

我正在开发的应用程序有一个全局的“捕获所有”异常处理程序,如果有任何未捕获的异常被抛出,它可以向用户显示更为直观的消息。我的问题是,当我打开异常->抛出,以便能够在异常被“全部捕获”捕获之前对其进行调试。在我看来,该框架抛出了许多未立即捕获的异常(例如在ReflectPropertyDescriptor中),因此我实际尝试调试的异常在噪音中丢失。有没有办法摆脱框架引起的异常,但不让这些异常出现在我自己的代码中


更新:经过更多的研究,并试图消除框架抛出的异常(许多异常都是框架中已知的问题,例如:),我终于找到了一个适合我的解决方案,即启用“仅我的代码”在工具>>选项>>调试>>常规>>中,只启用VS2008中的“我的代码”。

过滤框架引发的异常的一种方法是从异常派生您自己的异常类。然后,您可以使用多个
catch
块:

try
{
//your code here
}
catch (MyAppException myEx)
{
//Do something with your custom exception
}
catch (Exception ex)
{
//Do something (or nothing) with an exception thrown by the Framework
}

您可以通过VS2008中的“异常”对话框微调捕获哪些类型的异常的方式,但是如果框架正在抛出“大量异常”,您可能也希望对此进行研究。处理异常并不意味着它是安全的,也不意味着它不会影响您的性能。

消除“捕获所有异常”可能是值得的,因为这并不是一种很好的编程技术。例如,如果您正在处理输入输出(如文件读取/写入),则捕获IOException而不是更一般的异常,另一个示例是针对任何XML操作的XmlException。使用catch-all泛型异常可能会导致性能下降,因为特定异常必须“冒泡”到泛型异常处理程序

希望这有帮助, 顺致敬意,
Tom。

编写好的代码通常是有效的。嘿,这是一个非常有建设性的回答。那我就开始做了。我不确定你是否理解这个问题。除非您:(1)下载框架的调试符号,(B)在调试器中运行,(C)打开异常->公共语言运行时异常->抛出,否则您永远不会看到这些异常。在数据绑定方面,它们似乎发生了很多事情,尤其是在数据网格内部。@Hans:不要把它当作个人问题。我同意你的看法,像这样的评论是没有建设性的,也没有太多的洞察力。彼得:谢谢你的支持,我真的不应该对这种评论做出反应,但我自己也对这种评论感到惊讶。通常,如果框架抛出了很多异常,你就错了。是的,这就是为什么我发布了我所做的。@David:我没有反对你的回答,我试图加强它(我+1ed)。抱歉,如果我不能更好地表达自己:)我同意,当表单将设置反序列化到一组数据绑定控件时,在启动时会发生这种情况。我对这段代码不是很了解,而且我看不到没有调试符号的异常,所以它实际上没有被优先考虑。这是个好主意!暂时禁用它至少可以让我在异常发生时调试它。非常感谢。