类模块中断与未处理错误中断(VB6错误陷阱,IDE中的选项设置)



基本上,我试图理解Visual Basic 6.0 IDE中出现的"类模块中断"one_answers"未处理错误中断"之间的区别,路径如下:

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

三个选项似乎是:

  • 所有错误中断
  • 插班模块
  • 未处理错误中断

显然,根据MSDN的说法,第二个选项(类模块中断)实际上只是意味着"类模块中未处理错误的中断"。此外,此选项似乎是默认设置的(即:我认为它是开箱即用设置的)。

我想弄清楚的是,如果我选择了第二个选项,我会免费获得第三个选项(在未处理的错误上中断)吗?在这种情况下,它是否默认包含在类模块范围之外的所有场景中?建议一下,我目前正在进行的项目中没有任何类模块。不过我有.bas模块。此外,通过类Mdules,它们是否也可能引用正常的.bas模块?(这是我的第二个提问)。

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

出现错误时继续下一个"必需"错误时恢复下一个"不需要">

所需的是检查数组是否有长度,如果对其UBound的调用出错,则意味着它没有长度,如果它返回值为0或更大,则它确实有长度(因此存在)。即使在我开发的时候,这些类型的错误语句也需要保持活动状态。然而,在我开发的过程中,不需要的那些不应该保持活跃,所以我把它们都注释掉了,以确保我能捕捉到所有存在的错误。

一旦我准备好发布exe,我就按CTRL+H键查找所有出现的:

"On Error Resume Next"不需要

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

On Error Resume Next'NOT REQUIRED

。。。未注释的版本,这样在发布模式下,如果有任何剩余的错误,它们就不会显示给用户。

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

http://webcache.googleusercontent.com/search?q=cache:yUQZZK2n2IYJ:support.microsoft.com/kb/129876&hl=en&lr=lang_en%7语言tr&gl=au&tbs=lr:lang_1en%7lang_1tr&prmd=imvns&条=1

如果你想自愿参加,我也很想听听你的想法(这将是我暂定的/完全可选的第三个子问题,即你对回退错误处理技术的想法)。

简单地说,前两个问题是,如果我们选择选项2,我们是否将选项3包括在所有非课堂场景中?而且,当他们使用术语"类模块"时,是否可能也指.bas模块?(因为.bad模块实际上只是一个在启动过程中在后台预先实例化的类模块)。

谢谢。

我将从第一个选项开始。在所有错误上中断只需禁用错误处理程序。当您在放入错误处理程序后尝试调试时,这很有用,因为处理程序本身可能存在错误,或者,当错误在集装箱船继承权中冒泡时,您可能会忘记错误发生在哪里(过程中未处理的错误试图在调用过程中找到处理程序,如果您试图找到有问题的代码行,这可能会令人困惑)。

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

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

就我个人而言,我更喜欢将其设置在课堂中断模块上,因为它可以让我以最大的精度深入到错误的位置。不过,这是在我开始做错误处理程序之前;在这一点上,我通常会在这三个位置上反弹,这取决于我试图稳定的东西。

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

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

相比之下,"未经处理的错误中断"会导致它在类/用户控制代码内部发生错误时退出,从而难以追踪确切位置。

对于一般开发来说,最好将其设置为"未处理错误中断",因为当您处理了良性错误时,其他错误会变得令人讨厌。请注意,最好在它们触发错误之前尝试并检测它们。

最新更新