加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在VB6中重新启用默认错误处理

发布时间:2020-12-17 00:17:13 所属栏目:大数据 来源:网络整理
导读:我在一些地方有一些带有各种“On Error Goto”错误处理程序的代码来处理一些破坏的第三方硬件.我在没有错误陷阱的例程中遇到溢出错误(从Err变量中读取)但是由例程调用.我一直认为错误陷阱只在它们被声明的例程中有效,但看起来子例程中的错误可能导致它转到调
我在一些地方有一些带有各种“On Error Goto”错误处理程序的代码来处理一些破坏的第三方硬件.我在没有错误陷阱的例程中遇到溢出错误(从Err变量中读取)但是由例程调用.我一直认为错误陷阱只在它们被声明的例程中有效,但看起来子例程中的错误可能导致它转到调用函数的错误陷阱.

所以我关闭了调用函数的错误陷阱,发现我的溢出,一切都很好.但在我这样做之前,我花了一些时间试图找到一种编程方式让VB恢复到该例程中的默认错误处理(所以我不必修改外部代码来调试),但我不能.我能找到的唯一错误命令:

  On Error GoTo [label]
  On Error Resume Next
  On Error Goto 0
  On Error GoTo -1

所有打开手动错误处理 – 有没有办法关闭它(回到VB6默认)?

在 Error Handling Hierarchy的VB6手册中对此进行了详细说明.在错误转到0时,禁用当前过程中的错误处理程序,而不是在调用它的过程中.

If an error occurs in a procedure and
this procedure doesn’t have an enabled
error handler,Visual Basic searches
backward through the pending
procedures in the calls list — and executes the first
enabled error handler it finds. If it
doesn’t encounter an enabled error
handler anywhere in the calls list,it
presents a default unexpected error
message and halts execution.

正如其他人所说,您可以转到“工具 – 选项 – 常规”选项卡,然后选择“中断所有错误”.这有效地禁用了所有On Error语句 – IDE会在每次错误时立即中断.

如果你的VB6代码在正常操作中抛出错误,这可能会令人恼火.例如,当您检查文件是否存在时,或者用户在常用对话框中按取消时.您不希望IDE每次都在这些行上中断.但是,您可能在所有事件处理过程中都有样板错误处理程序,以阻止程序因意外错误而崩溃.但是当你调试问题时它们会很麻烦,因为IDE不会因错误而中断.一个技巧是在IDE中运行时关闭这些错误处理程序,但将它们保留在构建的可执行文件中.你这样做.

将这些功能放入模块中.

Public Function InIDE() As Boolean 
  Debug.Assert Not TestIDE(InIDE) 
End Function 

Private Function TestIDE(Test As Boolean) As Boolean 
  Test = True 
End Function

然后你可以编写像这样的错误处理程序.

Private Sub Form_Load() 
  If Not InIDE() Then On Error Goto PreventCrashes 
  <lots of code> 
  Exit Sub 

PreventCrashes: 
  <report the error> 
End Sub

从here开始.另一个提示 – 使用免费的插件MZTools自动添加这些样板错误处理程序.对于生产质量代码,您可以更进一步,在每个例程中放置一个错误处理程序来创建ghetto stack trace.您还可以在每个错误处理程序中立即记录错误.

编辑:Ant已正确指出On Error Goto -1是VB.Net statement并且在VB6中无效.

编辑:Arvo和OneNerd已经写了一些有趣的讨论,模仿VB6错误处理中的最终拆卸块. this question的讨论也值得一看.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读