VB6 IDE运行时 - 子/函数在出错

时间:2015-10-14 07:19:06

标签: vb6

之前我注意到在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修复此问题(如果它是一个错误) - 只是想知道其他人是如何解决这个问题的。

1 个答案:

答案 0 :(得分:0)

我通常在IDE中使用Option->General->Break on All Errors: On。当IDE遇到错误时,它会停止并等待我的确认。即使有On Error Resume Next,也会发生这种情况。

如果错误被解释,我有两个选择:

  1. 使用 Ctrl + F9
  2. 手动跳至下一行
  3. 右键菜单Toggle->Break on Unhandled Errors并继续 F5
  4. 后一个选项的子菜单类似于“选项”对话框中的选项,但是每个调试会话都是临时设置(直到IDE重新启动)。

    困难的部分正在与Break on All Errors一起发展。有时候我必须使用特制的类型库来改变方法签名以返回LONG而不是HRESULT,这样VB6就不会Err.Raise而是静默地失败并返回(选中)retval。

    对于超过100k LOC的任何VB6项目,使用Break on All Errors进行开发往往是强制性的。对于较小的那些,您可以购买带有On Error Resume Next标语的T恤,并在月底享受薪水: - ))