7

基本上,我试图了解出现在以下路径下的 Visual Basic 6.0 IDE 中的“Break in Class Module”和“Break on Unhandled Errors”之间的区别:

Tools --> Options --> General --> Error Trapping

这三个选项似乎是:

  • 打破所有错误
  • 打破课堂模块
  • 中断未处理的错误

现在,显然,根据 MSDN,第二个选项(Break in Class Module)实际上只是意味着“Break on Unhandled Errors in Class Modules”。此外,此选项似乎是默认设置的(即:我认为它设置为开箱即用)。

我想弄清楚的是,如果我选择了第二个选项,我是否可以免费获得第三个选项(Break on Unhandled Errors)?在那,它是否默认包含在类模块范围之外的所有场景中?建议,我当前活动的项目中没有任何类模块。我有 .bas 模块。另外,Class Mdules 是否也有可能指的是普通的 .bas 模块?(这是我的第二个子问题)。

基本上,我只是希望设置确保一旦发布 exe 就不会出现任何意外。我希望在开发时显示尽可能多的错误,而在发布模式下不显示。通常,我的表单上有两种类型的 On Error Resume Next,其中没有明确的错误处理,它们如下:

错误恢复下一个 ' 需要 错误恢复下一个 ' 不需要

需要的是,检查数组是否有任何长度,如果对其 UBound 的调用出错,这意味着它没有长度,如果它返回值 0 或更大,那么它确实有长度(因此, 存在)。即使在我开发过程中,这些类型的错误语句也需要保持活跃。但是,NOT REQUIRED 不应该在我开发时保持活动状态,因此我将它们全部注释掉以确保我捕获所有存在的错误。

一旦我准备好发布 exe,我会执行 CTRL+H 来查找所有出现的情况:

'On Error Resume Next' 不需要

(您可能已经注意到它们被注释掉了)......并将它们替换为:

On Error Resume Next ' 不需要

... 未注释的版本,因此在发布模式下,如果有任何遗留错误,它们不会显示给用户。

有关 MSDN 对三个选项的描述的更多信息(我已经阅读了两次,但仍然觉得不够),您可以访问以下链接:

http://webcache.googleusercontent.com/search?q=cache:yUQZZK2n2IYJ:support.microsoft.com/kb/129876&hl=en&lr=lang_en%7Clang_tr&gl=au&tbs=lr:lang_1en%7Clang_1tr&prmd=imvns&strip=1

如果您愿意自愿提供他们的想法,我也很想听听您的想法(这将是我的试探性/完全可选的第三个子问题,即您对后备错误处理技术的想法)。

总结一下,前两个问题是,如果我们选择选项 2,我们是否会在所有非类场景中包含选项 3?而且,当他们使用术语“类模块”时,他们是否也可能指的是 .bas 模块?(因为 .bad 模块实际上只是一个在启动期间在后台预先实例化的类模块)。

谢谢你。

4

2 回答 2

5

我将从第一个选项开始。中断所有错误只会禁用您的错误处理程序。当您在放入错误处理程序后尝试调试时,这很有用,因为您可能在处理程序本身中出现错误,或者当错误冒泡容器层次结构时,您可能会忘记错误发生的位置(错误是't 在过程中处理试图在调用过程中找到处理程序,如果您试图找到有问题的代码行,这可能会令人困惑)。

接下来,如果有一行代码导致其中出现错误,那么在未处理的错误上中断实际上并不会在类模块中中断。如果您设置了此选项,并且您在类中调用了一个方法,并且该方法中的代码行中存在错误,那么您将在客户端中具有该方法调用的行上中断。

类模块中的中断转到有错误的类中的代码行。需要注意的是,如果您使用的是 ActiveX EXE,则控制设置在其项目中,而不是在客户端项目中。也就是说,您可以中断客户端项目中设置的所有错误,并中断您的 ActiveX EXE 项目中设置的未处理错误,并且您不会中断类模块,因为您正在使用两个单独的进程。

我个人更喜欢在课堂模块中设置中断,因为它可以让我以最精确的方式深入到错误的位置。不过,这是在我开始执行错误处理程序之前;在那一点上,我通常会在所有三个方面反弹,这取决于我想要稳定的内容。

最后,我不建议永远不要使用 On Error Resume Next,除非是在内联错误处理的上下文中。

于 2012-10-03T00:13:39.210 回答
4

是的,当您选择“中断类模块”时,它仍然会中断未处理的错误,但它也会中断类模块(不是普通模块)中未在类模块本身中处理的任何错误。

将此与“中断未处理的错误”进行对比,这将导致它在其内部发生错误时退出类/用户控制代码,从而难以追踪确切位置。

最好将其设置为“中断未处理的错误”以进行一般开发,因为当您处理良性错误时,其他人会变得烦人。请注意,最好在它们触发错误之前尝试检测它们。

于 2012-10-02T09:35:22.617 回答