基本上,我试图理解Visual Basic 6.0 IDE中以下路径中出现的“Break in Class Module”和“Break on Unhandled Errors”之间的区别:
Tools --> Options --> General --> Error Trapping
这三个选项似乎是:
- 中断所有错误
- 分类课程
- 打破未处理的错误
现在,显然,根据MSDN,第二个选项(Break in Class Module)实际上只是意味着“打破类模块中未处理的错误”。此外,此选项似乎默认设置(即:我认为它设置为开箱即用)。
我想弄清楚的是,如果我选择了第二个选项,我是否可以免费获得第三个选项(打破未处理的错误)?那么,它是否默认包含在类模块频谱之外的所有场景中?建议,我目前活跃的项目中没有任何类模块。我有.bas模块。另外,是否有可能通过Class Mdules他们可能也指正常的.bas模块? (这是我的第二个子问题)。
基本上,我只是希望设置确保exe释放后不会有任何意外。我希望在开发时尽可能多地显示错误,并且在处于释放模式时不显示。通常,我的表单上有两种类型的On Error Resume Next,其中没有明确的错误处理,它们如下:
On Error Resume Next'REQUIRED On Error Resume Next'NOT REQUIRED
所需要的是,检查一个数组是否有任何长度,如果调用它的UBound错误,这意味着它没有长度,如果它返回0或更多的值,那么它确实有长度(因此,存在)。即使在我开发过程中,这些类型的错误语句也需要保持活动状态。但是,在我开发过程中,不需要的那些不应该保持活动状态,因此我将它们全部注释掉以确保我能够捕获所有存在的错误。
一旦我准备好发布exe,我会按CTRL + H查找所有出现的内容:
'On Error Resume Next'NOT REQUIRED
(您可能已经注意到它们已被注释掉了)......并将其替换为:
错误恢复接下来'不需要
...未注释的版本,因此在发布模式下,如果有任何剩余错误,则不会向用户显示。
有关MSDN对三个选项的描述的更多信息(我已经阅读了两次,但仍然找不到),您可以访问以下链接:
我也有兴趣听取你的想法,如果你想做志愿者(这将是我的暂定/完全可选的第三个子问题,那就是你对后备错误处理技术的看法)。
总结一下,前两个问题是,如果我们选择选项2,我们是否将选项3包含在所有非类场景中?而且,当他们使用术语“类模块”时,它们可能也指的是.bas模块吗? (因为.bad模块实际上只是一个在启动期间在后台预先实例化的类模块。)
谢谢。
答案 0 :(得分:5)
我将从第一个选项开始。中断所有错误只会禁用错误处理程序。当您在输入错误处理程序后尝试进行调试时,这非常有用,因为您可能在处理程序本身中存在错误,或者当错误冒泡容器层数时,您可能会忘记错误发生的位置(错误不是在程序中处理尝试在调用过程中找到一个处理程序,如果你试图找到有问题的代码行,这可能会造成混淆。)
接下来,如果存在导致错误的代码行,则在未处理的错误中中断实际上不会在类模块中中断。如果您设置了此选项,并且在类中调用方法,并且方法中的代码行中存在错误,那么您将在客户端中具有方法调用的行中断。
类模块中的break会转到具有错误的类中的代码行。需要注意的是,如果您使用的是ActiveX EXE,则控制设置位于其项目中而不是客户端项目中。也就是说,您可以中断客户端项目中设置的所有错误,并中断ActiveX EXE项目中设置的未处理错误,并且您不会因为使用两个单独的进程而在类模块中中断。
我个人更喜欢将它设置为类模块中的break,因为它允许我以最精确的方式深入到错误的站点。这是在我开始做错误处理程序之前;在那一点上,我通常会在所有三个方面反弹,这取决于我想要稳定的东西。
最后,除了在内联错误处理的上下文中,我不推荐使用On Error Resume Next进行EVER。
答案 1 :(得分:4)
是的,当你选择“Break in class module”时,它仍会打破未处理的错误,但它也会破坏类模块本身未处理的类模块(不是普通模块)中的任何错误。
将此与“未处理的错误中断”进行对比,这将导致它在类中发生错误时退出类/用户控制代码,从而难以追踪确切的位置。
最好将其设置为“未处理错误中断”以进行一般开发,因为当您处理好的错误时,其他人会感到烦恼。请注意,最好在它们触发错误之前尝试检测这些。