您可以使用多种技术。
这两个都提到了
使用 F8 和 Shift-F8 单步执行程序
添加止损(以及稍后删除)
其他
使用全局变量创建集合。将其用作堆栈并拥有您对推送和弹出字符串感兴趣的子例程。相反,不要弹出任何东西,你会得到一个踪迹。
使用 Watches 在选择条件下进行监控和中断。您几乎可以设置任何要中断的条件。
创建一个全局字符串并在输入时设置您的程序。通过 Watch 对其进行监控。
在您的代码中使用 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>
最后会出现一个列表,其中列出了所有已执行的命令(甚至是鼠标悬停之类的命令)以及它们遇到的状态和修改后的状态。然后,您可以依次检查每个对象以查看发生了什么。这几乎相当于创建 Undo/Redo
请注意,但是像 MouseOver 这样的东西可以将许多类推送到命令堆栈上,因此您必须仔细构建测试,否则信息会过载。请记住,您始终可以跳过将命令压入堆栈。
使用命令的缺点是您超出了调试范围,而是进行了重新设计。你将决定这个问题是否值得这样做。