Delphi7中提供了一些附加调试工具来帮助用户检查程序错误。从性能上讲,其中一些工具属于高级调试工具。尽管高级调试工具不像其他工具那样常用,但对于经验丰富的编程人员来说,它们是非常有用的。
Evaluate/Modify对话框(The Evaluate/Modify Dialog Box)
该对话框用于检查变量的当前值和修改变量的值。使用这个对话框,用户可以修改某个变量的值来测试不同的输出结果。在调试期间改变一个变量的值,使用户能测试程序不同参数的效果,而不必每次都重新编译。如下图主菜单【Run | Evaluate/Modify】或按【Ctrl + F7】
Note
该对话框的工具栏即可显示大图标也显示小图标,要在大小图标进行切换的话,用鼠标拖动位于工具栏下方的线条,工具就会在大小图标间进行调整了。
Evaluate/Modify对话框,类似于Watch List和Debug Inspector。如果点击代码中的一个变量,并从Code Editor的快捷菜单中选择【Evaluate/Modify】菜单项,该变量会自动被求值。也可手动输入要进行求值的变量,从主菜单选择【Run | Evaluate/Modify】菜单项,然后输入要求值的变量名。
Expression字段用于输入要对其求值的变量名或表达式。点击Evaluate按钮或按Enter键,表达式或变量就会被求值。结果显示在Result字段中。如下图:
Note
Evaluate/Modify对话框可当做一个简易计算器使用,可输入十六进制数(或十进制数,或两者都可)的数学公式,让计算器计算结果。例如如下图:
还可在Expression中输入逻辑表达式,Result显示True。如下图:
程序必须停在断点处才能使用Evaluate/Modify对话框这一功能。
如果用户想要改变一个变量的值,可在New Value字段输入新值并点击Modify按钮,变量就会变成输入的新值。当用户点击Run按钮重启启动程序(或继续步进调试)时,就会使用新值。
Note
与Watch List和Debug Inspector不同的是,当用户一行一行执行代码时,Evaluate/Modify对话框不会自动更新。如果代码改变了Evaluate/Modify对话框中变量的值,必须再点击Evaluate按钮才能看到改变后的值。这使得Evaluate/Modify对话框有个优点:步进式调试代码时速度更快,因为调试器不必每执行一行代码就求一个表达式的值。可交互地使用这个对话框来求变量或表达式的值,并且求完值后立即关闭此对话框。
调用栈窗口(The Call Stack Window)
在程序运行阶段,用户可通过查看调用栈来检查应用程序调用的函数或过程。从主菜单上选【View | Debug Windows | Call Stack】菜单项来显示Call Stack窗口,该窗口列出应用程序调用的函数和过程,按调用顺序的先后排列,最近调用的函数或过程列在窗口顶部。
双击Call Stack窗口中的方法名,会显示该方法的代码行(如果该方法在应用程序中);当函数或过程的代码不存在时(VCL方法), Call Stack窗口显示该过程所在的模块名和地址。双击没有源代码的函数和过程,会显示CPU窗口。
当碰到Windows Access Violation错误时,查看调用栈非常有帮助。通过查看调用栈,用户能找出程序中产生错误的位置;找到程序中错误位置是排除错误的第一步。
Tip
如果调用栈列表中包含有无意义的信息,那可能是调用栈被破坏了。被破坏的调用栈通常标志着栈溢出或内存覆盖。
CPU窗口(The CPU Window)
可从主菜单【View | Debug Windows | CPU】菜单项或按【Ctrl + Alt + C】来显示CPU窗口。
CPU窗口使用户能够在汇编指令级查看应用程序。可以执行一个汇编指令就暂停一下;也可以运行程序至某条汇编指令(就像用常规调试器运行程序至某行源代码一样)。CPU窗口分成五个窗格:反汇编窗格(Disassembly pane)、寄存器窗格(CPU Registers pane)、标志窗格(Flags pane)、原始栈窗格(Machine Stack pane)和转储窗格(Memory Dump pane)。
每个小窗格都有一个快捷菜单,这个快捷菜单提供使用该窗格时所需的功能。要有效地使用CPU窗口,必须懂汇编语言。显然,CPU窗口是一个高级调试工具。
Go to Address命令(The Go to Address Command)
Go to Address命令也是一个高级调试工具。当应用程序出现故障时,Windows会显示一条出错消息,给出违例地址。用户可以使用Go to Address命令来找出程序中发生故障的位置。当Windows发出Access Violation出错消息时,会显示一个类似于下图的错误。
当用户看到这样的出错消息时,记下违例发生的地址,从Code Editor快捷菜单中选择【Debug | Go to Address】菜单项来显示Go to Address对话框。
把记下的地址输入到Go to Address对话框的Address字段中。点击OK,调试器就开始查找发生故障的源代码行。如果故障出现在代码中,则光标会指着产生错误的源代码行。如果是代码以外的地方发生故障,会弹出一个消息框告诉用户,代码中未找到该地址。这是一个高级调试工具,用户可能还从未使用过。