c# - 为什么抛出的异常与 catch block C# 不正确匹配

标签 c# exception visual-studio-debugging

面对 SocketException 的一些奇怪问题。随附的屏幕截图说明了更多相关信息。

enter image description here

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

  2. 为什么控件要转到第二个 catch block ,该 block 旨在捕获任何异常?

[编辑]:在 Debug模式下也添加截图

enter image description here

最佳答案

执行是进入第二个catch block ,try-catch显然不是那样的,异常会向上抛出调用栈,任何后面的catch 子句被忽略。

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

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

简而言之,真正发生的事情是执行在第一次 throw 时停止,IDE 没有正确显示它。

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

更新:这个问题似乎与Release 模式下的调试无关,因为它仍然发生在Debug 模式下。不过,要点是调试不应该在 Release 模式下进行,因为可能会发生这种奇怪的事情。我会尝试清洁溶液,看看是否能解决问题。如果没有,我也不会担心,代码运行正常,只是 IDE 没有正确显示执行停止的地方,没什么大不了的。

关于c# - 为什么抛出的异常与 catch block C# 不正确匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37071063/

相关文章:

c++ - 在哪个内存区域创建异常类实例?

delphi - 对 EIdConnClosedGraceively 异常进行故障排除?

windows - 在 Win 7 和 8.1 中调试 shell 扩展

c# - Visual Studio 无法附加到 Unity,为什么?

c# - 使用 C# 强制关闭 Windows CE 5 应用程序

c# - 等待使用 AutoResetEvent 处理事件

c# - 用于在 HTML 中查找 WSDL 文件的正则表达式

javascript - Tracker afterFlush 函数出现异常 : fabric. Canvas 不是构造函数

c++ - 我正在寻找一种在 VS2012 中通过 NatVis 显示 UUID 的正确方法

c# - 如何使用 naudio 将音频录制到 byte[] 而不是文件中