为什么抛出的异常与catch块C#

时间:2016-05-06 11:18:38

标签: c# exception-handling visual-studio-debugging

面对SocketException的一些奇怪问题。随附的屏幕截图更多地了解它。

enter image description here

  1. 为什么第一个catch块没有捕获异常,而它是为了捕获SocketException而抛出的异常又是一个SocketException。

  2. 为什么控制会进入第二个捕获块,这意味着捕获任何异常?

  3. [编辑]:在调试模式中添加屏幕截图

    enter image description here

1 个答案:

答案 0 :(得分:1)

执行是而不是进入第二个catch块,try-catch显然无法正常工作,异常会被调用堆栈抛出,以下任何catch子句都是忽略。

它只是看起来,因为你在 Release 模式下进行调试这不是一个好主意,因为IDE可能缺少重要的调试信息,因此错误地显示输入第二个catch子句时执行停止。

请注意,在那一点停止真的没有意义,如果执行以某种方式使它成为第二个catch子句,它将在throw语句停止,而不是之前。

为了缩短它,真正发生的是第一个throw上的执行停止并且IDE没有正确显示它。

故事的道德;请勿在发布模式下进行调试。如果您正在运行 VS2015 ,它实际上会警告您 Release 模式下的调试体验将会低于标准(不确定此警告是否出现在先前版本中)。

更新:似乎问题与 Release 模式下的调试无关,因为它仍然发生在 Debug 模式下。不过,关键是调试不应该在 Release 模式下完成,因为这样的时髦事情可能会发生。我会尝试清理解决方案,看看是否能解决问题。如果不是,我不会出汗,代码表现正常,只是IDE无法正确显示执行停止的地方,没什么大不了的。