Delphi应用程序的调试(五)其他调试工具

news/2025/2/26 13:39:47

Delphi7中提供了一些附加调试工具来帮助用户检查程序错误。从性能上讲,其中一些工具属于高级调试工具。尽管高级调试工具不像其他工具那样常用,但对于经验丰富的编程人员来说,它们是非常有用的。

Evaluate/Modify对话框(The Evaluate/Modify Dialog Box)

该对话框用于检查变量的当前值和修改变量的值。使用这个对话框,用户可以修改某个变量的值来测试不同的输出结果。在调试期间改变一个变量的值,使用户能测试程序不同参数的效果,而不必每次都重新编译。如下图主菜单【Run | Evaluate/Modify】或按【Ctrl + F7】

image

Note

该对话框的工具栏即可显示大图标也显示小图标,要在大小图标进行切换的话,用鼠标拖动位于工具栏下方的线条,工具就会在大小图标间进行调整了。

image

Evaluate/Modify对话框,类似于Watch List和Debug Inspector。如果点击代码中的一个变量,并从Code Editor的快捷菜单中选择【Evaluate/Modify】菜单项,该变量会自动被求值。也可手动输入要进行求值的变量,从主菜单选择【Run  | Evaluate/Modify】菜单项,然后输入要求值的变量名。

Expression字段用于输入要对其求值的变量名或表达式。点击Evaluate按钮或按Enter键,表达式或变量就会被求值。结果显示在Result字段中。如下图:

image

Note

Evaluate/Modify对话框可当做一个简易计算器使用,可输入十六进制数(或十进制数,或两者都可)的数学公式,让计算器计算结果。例如如下图:

image

还可在Expression中输入逻辑表达式,Result显示True。如下图:

image

程序必须停在断点处才能使用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窗口,该窗口列出应用程序调用的函数和过程,按调用顺序的先后排列,最近调用的函数或过程列在窗口顶部。

image

双击Call Stack窗口中的方法名,会显示该方法的代码行(如果该方法在应用程序中);当函数或过程的代码不存在时(VCL方法), Call Stack窗口显示该过程所在的模块名和地址。双击没有源代码的函数和过程,会显示CPU窗口。

当碰到Windows Access Violation错误时,查看调用栈非常有帮助。通过查看调用栈,用户能找出程序中产生错误的位置;找到程序中错误位置是排除错误的第一步。

Tip

如果调用栈列表中包含有无意义的信息,那可能是调用栈被破坏了。被破坏的调用栈通常标志着栈溢出或内存覆盖。

CPU窗口(The CPU Window)

image

可从主菜单【View | Debug Windows | CPU】菜单项或按【Ctrl + Alt + C】来显示CPU窗口。
image

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出错消息时,会显示一个类似于下图的错误。

image

当用户看到这样的出错消息时,记下违例发生的地址,从Code Editor快捷菜单中选择【Debug | Go to Address】菜单项来显示Go to Address对话框。

image

把记下的地址输入到Go to Address对话框的Address字段中。点击OK,调试器就开始查找发生故障的源代码行。如果故障出现在代码中,则光标会指着产生错误的源代码行。如果是代码以外的地方发生故障,会弹出一个消息框告诉用户,代码中未找到该地址。这是一个高级调试工具,用户可能还从未使用过。

转载于:https://www.cnblogs.com/pchmonster/archive/2012/05/26/2519606.html


http://www.niftyadmin.cn/n/673085.html

相关文章

TDD从何开始

万事开头难。在TDD中,人们纠结最多的可能是这样一个问题:如何写第一个测试呢?实际上要视不同的问题而定。如果问题本身是一个算法求解,或者是一个大系统中的小单元,那么可以从最简单、最直观的情况出发,这样…

触发器不能读它的问题

http://space.itpub.net/7728585/viewspace-718992 报错如下: SQL> update GPPAYMENTFUND set attribute51 where fundapplyno 20120314500102010001; update GPPAYMENTFUND set attribute51 where fundapplyno 20120314500102010001 ORA-04091: 表 ACDEP.GPPAYM…

北京银行(601169))今日申购全攻略

2007-9-11 8:28:00 代码:601169 作者:来源: 出处: 顶点财经加入收藏复制链接给好友跳到低部北京银行(601169) 新股发行网上申购日:2007-09-11,发行方式:网下向询价对象配售和网上定价发行相结合,发行数量:12亿股,申购上限:8.4亿股…

UVa 409 - Excuses, Excuses!

1A,呵呵。 注意不区分大小写,如果单词重复也要算的,还有单词要合法,就是哲句话“A keyword occurs" in an excuse if and only if it exists in the string in contiguous form and is delimited by the beginning or end of the line o…

vim按键功能总览表格

转载于:https://www.cnblogs.com/CodeWorkerLiMing/archive/2012/06/09/2543328.html

黑石6亿美元战略入股蓝星20%

http://www.sina.com.cn 2007年09月11日 02:20 中国证券网-上海证券报黑石6亿美元战略入股蓝星20%点击此处查看全部财经新闻图片记者 陈其珏 蓝星与美国私人股本集团黑石一段传得沸沸扬扬的“姻缘”终于浮出水面。昨天,中国化工集团(下称“中国化工”&a…

理解REST软件架构

一种思维方式影响了软件行业的发展。REST软件架构是当今世界上最成功的互联网的超媒体分布式系统。它让人们真正理解我们的网络协议HTTP本来面貌。它正在成为网络服务的主流技术,同时也正在改变互联网的网络软件开发的全新思维方式。AJAX技术和Rails框架把REST软件架…

葛 洲 坝(600068):整体上市 巨额订单

2007-9-11 16:01:00 代码:600068 作者:来源: 东方证券 出处: 加入收藏复制链接给好友跳到低部大盘高位震荡,投资者畏高心理有所抬头,但在目前流动性过剩的现状下,新资金的涌入依然是十分踊跃的,并且市场仍然存在着可令投资者疯狂…