如何在没有断点的情况下强制VB6在程序执行时进入调试器?

如何在没有断点的情况下强制VB6在程序执行时进入调试器?,vb6,debugging,Vb6,Debugging,我试图观看VB6应用程序的执行,但遇到了一个问题,因为一旦我进入调试器,然后单击“继续”,它将不再允许我单步执行代码,直到遇到另一个断点。我希望能够执行一个程序,而无需通过某些步骤,直到我到达一个我希望看到它执行的点。理想情况下,这将是在按下按钮“进入”该功能时按下一个键的效果 提前谢谢 [编辑]:我知道我可以使用断点来停止执行。更清楚地说,问题是我不知道执行将到哪里,所以我不能在那里设置断点(因为我不知道断点在哪里)。这就是为什么我基本上希望能够说,‘在我做了下一件事之后,不管发生什么,都要休

我试图观看VB6应用程序的执行,但遇到了一个问题,因为一旦我进入调试器,然后单击“继续”,它将不再允许我单步执行代码,直到遇到另一个断点。我希望能够执行一个程序,而无需通过某些步骤,直到我到达一个我希望看到它执行的点。理想情况下,这将是在按下按钮“进入”该功能时按下一个键的效果

提前谢谢


[编辑]:我知道我可以使用断点来停止执行。更清楚地说,问题是我不知道执行将到哪里,所以我不能在那里设置断点(因为我不知道断点在哪里)。这就是为什么我基本上希望能够说,‘在我做了下一件事之后,不管发生什么,都要休息’。听起来这项功能似乎不存在,但我仍在祈祷。

您可以按F8键逐行查看代码。或者,您也可以按SHIFT-F8逐行执行

F8将引导您进入一个功能,SHIFT-F8将引导您进入该功能。如果单击VBIDE中的“调试”菜单,也会看到其他选项

编辑:

您还可以使用以下方法在代码中设置永久断点:

Debug.Assert False

通过这种方式,“断点”保存在代码中。编译应用程序时,将忽略调试代码。

VB6中有一个可用的Stop语句,当通过IDE运行的代码执行该语句时,该语句将下降到调试器。(编译发布版本时,请确保删除代码中的所有Stop语句。)

代码运行时,按ctrl+break(或IDE中的“VCR暂停”按钮),然后按F8(或从IDE中的调试菜单中选择“单步执行”)继续运行应用程序。下一个操作将导致执行中断


请注意,导致中断的原因并不总是您希望的那个。特别令人恼火的是_MouseOver事件,它阻止你按下鼠标或触发比你能执行的动作还要快的计时器。在运行应用程序时,某些中断甚至可能是致命的,例如Windows消息被挂起的位置(子类化)。还可以考虑在代码中没有一个事件处理程序(可以)用于它可以中断的操作。但是通常这种技术会确定应该在哪里设置断点。

有几种技术可以使用

已经提到了这两个问题

使用F8和Shift-F8单步执行程序

添加停止(稍后删除)

其他

使用全局变量创建集合。将其用作堆栈,并具有您感兴趣的推送和弹出字符串的子例程。相反,不要弹出任何东西,你会得到一个跟踪

使用手表监控并在选择条件下中断。您可以设置任何要中断的条件

创建一个全局字符串,并在输入过程时设置它们。通过手表监视它

在代码中使用Debug.Print。与Stop不同的是,您可以在不影响生产代码的情况下保留这些代码

使用文件系统对象创建一个文本文件作为日志

有时,问题只发生在已编译的版本中,然后您需要使用MsgBox或登录到文本文件。MsgBox可以改变复杂用户与表单交互的行为

这些都是我在调试应用程序时使用的技术。如果我必须监视一个应用程序,我会使用Debug.Print。如果这不起作用,那么就登录到一个文本文件

如果您有非常复杂的事情发生,那么我建议将所有代码从事件中移入实现命令模式的类中。您的命令类应该通过和接口与表单交互

在命令类的Execute方法中

<save the current state>
<Do your original code>
<save the modified state>
<push the command onto a stack>

将要发生的是,您将得到一个列表,其中列出了您已执行的所有命令(甚至包括mouseover之类的命令),以及它们遇到的状态和修改后的状态。然后,您可以依次检查每个对象以查看发生了什么。这几乎等同于创建撤消/重做

但是请注意,MouseOver之类的东西可以在命令堆栈上推送很多类,因此您必须小心地构造测试,否则会被信息过载。请记住,始终可以跳过将命令推送到堆栈上


使用命令的缺点是,您超越了调试,转而重新设计。您需要决定这个问题是否值得这样做。

我认为您被标记了,因为您不需要在编译之前删除停止语句,因为它们被忽略了。我希望这不是原因,根据我在VB6中的经验,在编译后的32位可执行文件的发布版本中留下Stop语句会导致该可执行文件在命中该代码时显示一个消息框,上面写着“遇到Stop语句”,然后终止程序。