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

Erx*_*der 7 vb6 error-handling compiler-errors compiler-options visual-studio

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

Tools --> Options --> General --> Error Trapping
Run Code Online (Sandbox Code Playgroud)

这三个选项似乎是:

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

现在,显然,根据MSDN,第二个选项(Break in Class Module)实际上只是意味着"打破类模块中未处理的错误".此外,此选项似乎默认设置(即:我认为它设置为开箱即用).

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

基本上,我只是希望设置确保exe释放后不会有任何意外.我希望在开发时尽可能多地显示错误,并且在处于释放模式时不显示.通常,我的表单上有两种类型的On Error Resume Next,没有明确的错误处理,它们如下:

在错误恢复接下来'必须在错误恢复接下来'不是必需的

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

一旦我准备好释放exe,我会按CTRL + H查找所有出现的:

'错误继续下一步'不需要

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

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模块实际上只是一个在启动期间在后台预先实例化的类模块).

谢谢.

Bob*_*des 5

我将从第一个选项开始.中断所有错误只会禁用错误处理程序.当您在输入错误处理程序后尝试进行调试时,这非常有用,因为您可能在处理程序本身中存在错误,或者当错误冒泡容器层数时,您可能会忘记错误发生的位置(错误不是在一个过程中处理尝试在调用过程中找到一个处理程序,如果你试图找到有问题的代码行,这可能会让人感到困惑.

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

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

我个人更喜欢将它设置为类模块中的break,因为它允许我以最精确的方式深入到错误的站点.这是在我开始做错误处理程序之前; 在那一点上,我通常会在这三个方面反弹,这取决于我想要稳定的东西.

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