2

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

我正在开发的应用程序有一个全局“catch all”异常处理程序,如果碰巧有任何未捕获的异常被抛出,它可以向用户呈现更美观的消息。我的问题是当我打开 Exceptions->Thrown 以便能够在异常被“全部捕获”捕获之前对其进行调试。在我看来,该框架抛出了很多没有立即捕获的异常(例如在 ReflectPropertyDescriptor 中),因此我实际上试图调试的异常会在噪音中消失。有没有办法摆脱框架引起的异常,但保留我自己的代码中的异常?

更新:经过更多的研究并实际上试图摆脱框架抛出的异常(其中许多是框架中的已知问题,例如:XmlSerializer 在构造函数中给出 FileNotFoundException)我终于找到了一个适合我的解决方案,在工具>>选项>>调试>>常规>>在VS2008中启用仅我的代码中打开“仅我的代码”。

4

3 回答 3

6

您可以通过 VS2008 中的“异常”对话框微调以哪种方式捕获哪些类型的异常,但如果框架工作抛出“大量异常”,您可能还需要查看它。仅仅因为处理了异常并不意味着它是安全的,或者它不会影响您的性能。

于 2009-11-24T15:23:50.983 回答
2

过滤框架抛出的异常的一种方法是从Exception. 然后,您可以使用多个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
}
于 2009-11-24T15:23:33.837 回答
1

摆脱 catch-all 异常可能是值得的,因为它不是很好的编程技术。例如,如果您正在使用诸如文件读/写之类的输入输出,则捕获 IOException 而不是更通用的异常,另一个示例是用于任何 XML 操作的 XmlException。使用包罗万象的通用异常可能会影响性能,因为特定异常必须“冒泡”到通用异常处理程序。

希望这会有所帮助,最好的问候,汤姆。

于 2009-11-24T15:34:36.780 回答