【发布时间】:2013-01-01 03:53:39
【问题描述】:
这是一个非常奇怪的问题。我们有一个带有多个 Catch 块的 Try Catch。第一个 Catch 块没有代码,只是一个注释。
Try
'Some Code
Catch ex As ThreadAbortException
'Do Nothing
Catch ex As Exception
HandleException(ex)
End Try
如果抛出除 ThreadAbortException 之外的异常,则如预期的那样,它会被第二个 Catch 捕获。但是,在 VS2010 中单步执行代码时,ex 对象在这种情况下是 Nothing。到目前为止,我们已经找到了两种方法来“修复”这个问题。
修复 1: 重命名第一个异常变量。
Try
'Some Code
Catch tex As ThreadAbortException
'Do Nothing
Catch ex As Exception
HandleException(ex)
End Try
修复 2:将任意代码行添加到第一个 Catch 块。
Try
'Some Code
Catch ex As ThreadAbortException
Dim i As Integer = 1
Catch ex As Exception
HandleException(ex)
End Try
如果在上述任何情况下运行,HandleException 中的代码似乎仍然可以正常运行。这是 Visual Studio 或调试器中的错误吗?还是我们在这里遗漏了什么,上面的第一段代码无效?
这一切都在 .NET 4.0 中完成。
【问题讨论】:
-
你是在发布模式下单步执行代码吗?
-
+1。好问题,StackOverflow 上的稀有宝石。
-
这个调试器错误在 VS2012 中看起来已修复。请确保您已安装 SP1,它修复了许多调试器错误。
-
我们确实安装了 SP1。我们也有 VS2012,但仍在使用 VS2010 进行大多数开发。如果这在 VS2012 中有效,那将确实确认这是一个 VS2010 错误。
-
哇!你通过一个简单的问题获得了 90 声望 :)
标签: .net vb.net exception .net-4.0 exception-handling