首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何强迫VB6在没有断点的情况下从程序执行中输入调试器?

如何强迫VB6在没有断点的情况下从程序执行中输入调试器?
EN

Stack Overflow用户
提问于 2008-11-13 20:19:09
回答 4查看 11K关注 0票数 2

我试图观察一个VB6应用程序的执行,我遇到了一个问题,因为一旦我输入调试器,然后点击Continue,它就不再允许我在到达另一个断点之前遍历代码。我想要能够执行一个程序,而不经过一些东西,直到我达到一个点,我想看到它的执行。理想情况下,这会产生按住键的效果,而我按下一个按钮以“进入”该功能。

提前感谢!

编辑:我知道我可以使用断点来停止执行。更清楚的是,问题是我不知道执行到哪里,所以我不能在那里设置断点(因为我不知道在哪里)。这就是为什么我本质上想要说,‘在我做完接下来的事情之后,不管发生什么,我都会崩溃’。听起来这个功能不存在,但我仍然在祈祷。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-11-14 08:23:43

当代码运行时,按ctrl+break (或IDE中的'VCR暂停‘按钮),然后按F8 (或从IDE中的Debug菜单中选择'Step in’)继续运行应用程序。下一个操作将导致执行中断。

请注意,造成中断的原因并不总是您希望的那样。特别恼人的是_MouseOver事件,它阻止您执行鼠标下压或计时器触发超出您所能执行的动作。在运行应用程序时,有些中断甚至可能是致命的,例如Windows消息已经挂起(子类)。还要考虑的是,在代码中可能没有一个事件处理程序(尚未)用于您的操作,因为它可能会中断。但通常这种技术可以确定您应该在何处设置断点。

票数 5
EN

Stack Overflow用户

发布于 2008-11-13 20:44:12

有一个停止语句可在VB6中使用,当语句从通过IDE运行的代码执行时,该语句将拖放到调试器中。(在编译发布版本时,只需确保从代码中删除所有停止语句。)

票数 3
EN

Stack Overflow用户

发布于 2008-11-14 16:59:08

您可以使用以下几种技术。

这两件事都被提到了

使用F8和Shift-F8执行程序。

添加停止(然后删除)

其他

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

使用手表在选择条件下监视和破坏。您可以设置几乎任何条件,以打破。

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

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

使用“文件系统”对象创建用作日志的文本文件。

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

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

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

在命令类的Execute方法中,您将看到以下内容

代码语言:javascript
复制
<save the current state>
<Do your original code>
<save the modified state>
<push the command onto a stack>

会发生的情况是,您最终得到了所有执行的命令(甚至是mouseover)的列表,其中包含了它们遇到的状态和修改后的状态。然后,您可以依次检查每个对象,以查看正在发生的事情。这几乎等同于创建撤消/重做。

注意,但是,像MouseOver这样的东西可以在命令堆栈上推送很多类,所以您必须仔细地构造测试,否则就会被信息超载。记住,您可以跳过将命令推到堆栈上。

使用命令的缺点是,从调试到重新设计。你将决定这个问题是否值得这样做。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/288142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档