VB6 IDE运行时-发生错误后子/函数意外退出

VB6 IDE运行时-发生错误后子/函数意外退出,vb6,Vb6,之前,我注意到在IDE中运行应用程序时会导致意外行为。但我现在意外地发现了一组可复制的情况,导致它忽略错误捕获或缺少错误 下面的代码显示了问题: 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"

之前,我注意到在IDE中运行应用程序时会导致意外行为。但我现在意外地发现了一组可复制的情况,导致它忽略错误捕获或缺少错误

下面的代码显示了问题:

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。 我已经REM了“错误恢复下一步”行,就好像我在调试Sub2一样。但是当错误到达Debug.print 10/0时,IDE不会停止,而是静默地退出到调用例程。 因此,如果我禁用了错误捕获以便调试Sub2,IDE的行为将非常奇怪,只返回调用例程。 如果我在Sub1中也禁用了“On Error Resume Next”,IDE的行为将与预期的一样,并在Sub2中引发错误

解决方法总是在调用子函数/函数之前立即禁用错误捕获,然后在返回后再次启用。但这似乎是个难题。有人知道我错过的“修复”热修复吗

如果这是一个bug,我并不是建议微软修复它——只是想知道其他人是如何解决这个问题的。

我通常在IDE中使用Option->General->Break on All Errors:on。当IDE出现错误时,它会停止并等待我的确认。即使下次恢复时出错,也会发生这种情况

如果考虑到错误,我有两个选择:

使用Ctrl+F9手动跳到下一行 右键单击菜单切换->中断未处理的错误并继续F5 后一个选项的子菜单类似于“选项”对话框中的选项,但在IDE重新启动之前,它是每个调试会话的临时设置

最困难的部分是随着所有错误的突破而发展。有时我不得不使用精心编制的TypeLib来改变方法签名,以返回long而不是HRESULT,这样VB6就不会出错。Raise,而是通过选中的retval以静默方式失败


对于超过100k LOC的任何VB6项目,在所有错误上中断开发往往是强制性的。对于较小的,您可以购买印有On Error Resume Next标语的t恤衫,并在月底享受工资支票:-

似乎与以下内容相匹配:On Error Resume Next导致执行继续,语句紧跟导致运行时错误的语句之后,或者在包含On Error Resume Next语句的过程的最近一次调用之后立即使用该语句。我的朋友希达米恩,谢谢你。没有发现这一点很尴尬,但谢谢你找到了。所以这是预期的行为,尽管我认为在调试时可能会导致混乱。正如预期的那样,可能不会有一个变通办法。我很想删除这个问题,但是这个问题和你的回答可能会帮助其他人。再次感谢。伊恩