作者:Colin Nicholls
发布时间:1999.05
翻译:
deepl https://www.deepl.com/translator
格式整理:xinjie
—————————————————
调试输出窗口
调试输出窗口可以通过以下方式显示:从工具菜单中选择 "输出";或使用命令 ACTIVATE WINDOW ‘debug output';如果调试工具栏可见,则按下调试输出复选按钮:
调试输出窗口用于显示调试信息,既包括 FoxPro 生成的信息,也包括使用 DEBUGOUT 命令在程序中自行生成的信息。您可以将调试输出当作一种持续的等待窗口来使用:
穷人的分析器
在 VFP 6 中出现出色的分析器工具之前,我们可以在每个过程或方法的开头添加一条简单的语句来分析代码:
#IF _DEBUG = .T.
DEBUGOUT TIME(1) + " " + SYS(16)
#ENDIF
在运行时或调试输出窗口不可见时,DEBUGOUT 对性能的影响可以忽略不计,但对于那些性能狂热者,你可以使用 #define 将代码括起来,创建一个特殊的 "调试 "编译。在过程中加入此类代码的结果如下所示:
收集时序信息后,您可以使用右键单击右键菜单上的另存为...选项,将调试输出窗口的内容保存到文本文件中,以便进一步处理。然后清除该窗口,以便下次运行。
除了收集 DEBUGOUT 语句的结果外,调试输出窗口还可以有其他形式的输出,例如...
事件跟踪
如果某个对象的方法中的代码出现相互干扰或不按顺序运行的问题,该怎么办?也许您怀疑自己在错误的方法中添加了代码?与其费力地在类中的每个方法和事件中编写 DEBUGOUT 语句,不如使用调试器的事件跟踪功能来显示哪些事件正在发生以及发生的顺序。
单击调试工具栏上的切换事件记录按钮即可启动事件记录。这将显示事件跟踪对话框:
在这里,您可以决定跟踪哪些事件,以及将事件日志指向何处。默认情况下,事件日志会转到调试输出窗口,但也可以直接转到文件。
让我们来看看结果:
提示:每个事件的前缀都有其对象和完整的容器详细信息。在这种情况下,给对象起一个有意义的名称,而不是让它们停留在默认的 Text1 或 Form1 名称上,是非常有好处的。
提示:除非确实需要,否则不要跟踪 MouseMove 事件。因为往往会有很多这样的事件。
覆盖日志
按下调试器工具栏上的覆盖按钮后,会出现以下对话框:
通过该对话框,您可以指定要将覆盖信息记录到哪个文件,以及 FoxPro 是否应附加到已存在的文件或替换该文件。覆盖范围记录本身就是一篇文章的主题,在此不再赘述。请参阅下面的 “何去何从?”
调试器选项
前面我们简要介绍了“工具-选项"对话框的调试器窗口。在这里,你可以设置每个调试窗口中不同类型文本的字体、背景和前景颜色,这样就可以很容易地看到哪个窗口是哪个窗口。
如果按下 "工具-选项 "对话框中的 "设置为默认值 "按钮,则在此对话框中进行的所有更改将在下一次 Visual FoxPro 会话中持续有效。
除了这些外观设置外,还有一些重要的配置项无法在其他任何地方设置:
⦁ 显示定时器事件复选框通常不打勾,这意味着当定时器事件发生时,调试器会自动跳过代码。您可以在复选框中打勾来覆盖这一行为。但如果这样做,间隔时间短(少于几秒)的计时器会严重影响有效跟踪代码的能力。
⦁ 显示行号复选框可以在跟踪窗口中源代码行的左侧显示行号。
⦁ 显示调用堆栈顺序复选框与调用堆栈窗口上下文菜单中的 "序号位置 "相同。它可以在调用堆栈的每一级显示一个数字,显示其级别。
⦁ “记录调试输出 ”复选框可将调试输出窗口中的信息自动记录到您选择的文件中。
⦁ 环境组合列表可选择 FoxPro Frame 或 Debug Frame作为各个调试器窗口的父窗口。
现在,让我们将环境设置为 Debug Frame,看看这对我们的调试过程有何影响。