我刚刚安装并开始使用VS2012.之前一直在使用VS2008 Express.VS2012在Win 7 64位上运行.(以前的开发环境是在XP 32位上).
到目前为止,已经有一个基础研究项目(WinForms,VB),并发现VS忽略了未处理的异常.最后一行应该导致异常:
With cmd
.Connection = sqlConn
.CommandType = CommandType.StoredProcedure
.CommandText = "NameOfStoredProcedure"
.Parameters.Add("@TheParameterName", SqlDbType.Int, -1)
.Parameters("@TheParameterNameWithATypo").Direction = ParameterDirection.ReturnValue
Run Code Online (Sandbox Code Playgroud)
果然,立即窗口显示:
A first chance exception of type 'System.IndexOutOfRangeException' occurred in System.Data.dll
Run Code Online (Sandbox Code Playgroud)
但代码只是继续运行!
在Debug/Exceptions对话框中,我为每种类型的异常都有一个"Thrown"和"User-Unhandled"复选框.所有人都勾选了"User-Unhandled".我不想勾选"Thrown",因为我将处理异常并且不想中断处理的异常.(现在,我没有尝试...根本没有Catch块 - 但是调试器就好像整个项目都包含在一个中一样).
我已经查看了所有选项等等,但找不到任何魔法"打开Break on Exception"选项.这不是我的代码我正在寻求帮助 - 这就是发生这种情况我不能相信调试器能够发现我不可避免地会犯下的愚蠢错误.
发现另一个问题,有人碰到了这个问题,而Win64似乎存在问题.但VS在Win64上真的无法使用吗?我不能完全相信 - 但不能有效地打破未处理的异常使其无法使用.
编辑: 感谢您的所有意见.我尝试过Neolisk的解决方案,但由于两个处理程序的签名不同,因此必须稍微更改代码:
Public Sub Main()
AddHandler Application.ThreadException, AddressOf ThreadExceptionHandler
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException)
AddHandler AppDomain.CurrentDomain.UnhandledException, AddressOf UnhandledExceptionHandler
Form1.Show()
End Sub
Friend Sub ThreadExceptionHandler(sender As Object, e As System.Threading.ThreadExceptionEventArgs)
End Sub
Friend …Run Code Online (Sandbox Code Playgroud)