1

我有一个这样的 try-catch 块:

Try
  Listbox1.RemoveRow(Listbox1.ListIndex)
Catch err As OutOfBoundsException
  MsgBox("Derp")
End Try

当我在调试器中运行我的项目时,我在我试图捕捉的确切行上得到一个 OutOfBoundsException !为什么这不起作用?!?

4

2 回答 2

2

在我看来,调试器会在该行中断并向您显示异常。但是如果你点击 resume,它会继续,捕获异常,然后显示消息。

也许他们在这个版本中改变了调试器的行为。

更新:你可以去 Project > Break on exception 来改变这个

于 2011-04-19T08:18:18.213 回答
2

一旦遇到异常,调试器将在任何其他代码执行之前中断。这包括您可能已经放入的任何异常处理代码,例如 Try...Catch 块。

如果您有一些代码会引发大量异常,并且您不想每次调试时都单步执行,那么您有两种选择:核能和外科手术。

核选项是告诉调试器根本不要中断任何异常,这具有不幸的副作用,即应用于您的整个项目而不是您要排除的一小部分项目。

手术选项是使用pragma 指令在麻烦的代码周围关闭和打开异常中断:

#Pragma BreakOnExceptions Off
try
  Listbox1.RemoveRow Listbox1.ListIndex
catch err As OutOfBoundsException
  MsgBox "Derp"
End
#Pragma BreakOnExceptions On

这比简单地完全关闭调试器的一部分要好得多。注意:BreakOnExepctions 指令将在函数返回后立即恢复为您的全局设置(打开或关闭),并且对于它所包围的代码是本地的。

于 2011-04-20T05:14:47.357 回答