之前我注意到在IDE中运行App会导致意外行为的一些情况。但我现在(意外地)发现了一组可重复的情况,导致它忽略了错误捕获(或缺少错误)。
下面的代码显示了问题:
Private Sub Sub1()
On Error Resume Next
err.clear
Call Sub2
Debug.Print 10 / 0
If Err.Number <> 0 Then
Debug.Print "Found error in Sub1"
End If
Err.Clear
Call Sub2
End Sub
Sub Sub2()
' On Error Resume Net
err.clear
Debug.Print 10 / 0
If Err.Number <> 0 Then
Debug.Print "Found error in Sub2"
End If
End Sub
Sub1调用Sub2。
我已经注意到了“接下来的错误恢复”#39;就好像我正在调试Sub2一样。但是当达到错误时(Debug.print 10/0),而不是IDE暂停,它静默退出到调用例程。
因此,如果我已经禁用了错误捕获以便我可以调试Sub2,那么IDE会表现得非常奇怪并且只返回调用例程。
如果我也禁用了“接下来错误恢复”&#39;在Sub1中,IDE的行为符合预期,并在Sub2中引发错误。
解决方法是始终以在调用Sub / Function之前立即禁用错误捕获,然后在返回后再次启用它。但这似乎是一个障碍。有没有人知道一个&#39;修复&#39; (我错过的修补程序?)。
我并不是建议MS修复此问题(如果它是一个错误) - 只是想知道其他人是如何解决这个问题的。
答案 0 :(得分:0)
我通常在IDE中使用Option->General->Break on All Errors: On
。当IDE遇到错误时,它会停止并等待我的确认。即使有On Error Resume Next
,也会发生这种情况。
如果错误被解释,我有两个选择:
Toggle->Break on Unhandled Errors
并继续 F5 后一个选项的子菜单类似于“选项”对话框中的选项,但是每个调试会话都是临时设置(直到IDE重新启动)。
困难的部分正在与Break on All Errors
一起发展。有时候我必须使用特制的类型库来改变方法签名以返回LONG而不是HRESULT,这样VB6就不会Err.Raise
而是静默地失败并返回(选中)retval。
Break on All Errors
进行开发往往是强制性的。对于较小的那些,您可以购买带有On Error Resume Next
标语的T恤,并在月底享受薪水: - ))