我有一个这样的 try-catch 块:
Try
Listbox1.RemoveRow(Listbox1.ListIndex)
Catch err As OutOfBoundsException
MsgBox("Derp")
End Try
当我在调试器中运行我的项目时,我在我试图捕捉的确切行上得到一个 OutOfBoundsException !为什么这不起作用?!?
我有一个这样的 try-catch 块:
Try
Listbox1.RemoveRow(Listbox1.ListIndex)
Catch err As OutOfBoundsException
MsgBox("Derp")
End Try
当我在调试器中运行我的项目时,我在我试图捕捉的确切行上得到一个 OutOfBoundsException !为什么这不起作用?!?
在我看来,调试器会在该行中断并向您显示异常。但是如果你点击 resume,它会继续,捕获异常,然后显示消息。
也许他们在这个版本中改变了调试器的行为。
更新:你可以去 Project > Break on exception 来改变这个
一旦遇到异常,调试器将在任何其他代码执行之前中断。这包括您可能已经放入的任何异常处理代码,例如 Try...Catch 块。
如果您有一些代码会引发大量异常,并且您不想每次调试时都单步执行,那么您有两种选择:核能和外科手术。
核选项是告诉调试器根本不要中断任何异常,这具有不幸的副作用,即应用于您的整个项目而不是您要排除的一小部分项目。
手术选项是使用pragma 指令在麻烦的代码周围关闭和打开异常中断:
#Pragma BreakOnExceptions Off
try
Listbox1.RemoveRow Listbox1.ListIndex
catch err As OutOfBoundsException
MsgBox "Derp"
End
#Pragma BreakOnExceptions On
这比简单地完全关闭调试器的一部分要好得多。注意:BreakOnExepctions 指令将在函数返回后立即恢复为您的全局设置(打开或关闭),并且对于它所包围的代码是本地的。