Delphi应用程序的调试(五)其他调试工具
Delphi应用程序的调试(五)其他调试工具
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,调试器就开始查找发生故障的源代码行。如果故障出现在代码中,则光标会指着产生错误的源代码行。如果是代码以外的地方发生故障,会弹出一个消息框告诉用户,代码中未找到该地址。这是一个高级调试工具,用户可能还从未使用过。
Delphi应用程序的调试(五)其他调试工具的更多相关文章
- Delphi应用程序的调试(二)使用断点
Delphi应用程序的调试(二)使用断点 使用断点(Using Breakpoints) 当用户从Delphi IDE 运行程序时,程序全速运行,只会在设置了断点的地方停住. New Term 断点( ...
- Delphi应用程序的调试(十)调试器选项(在IDE中不要使用异常)
可在两个级别上设置调试选项:工程级和环境级.在前面的讲解中讲解了工程级调试选项,通过主菜单[Project | Options…]打开如下对话框: 可在Debugger Options对话框中设置全局 ...
- Delphi应用程序的调试(十)调试器选项
可在两个级别上设置调试选项:工程级和环境级.在前面的讲解中讲解了工程级调试选项,通过主菜单[Project | Options…]打开如下对话框: 可在Debugger Options对话框中设置全局 ...
- Delphi应用程序的调试(六)步进式代码调试
步进式代码调试(Stepping Through Your Code) 步进式代码调试是最基本的调试操作之一,但仍要在此讲述.人们常常容易犯只见树木不见森林的错误.经常复习基本的知识有助于读者了解以前 ...
- Delphi应用程序的调试(三)监视变量
监视变量(Watching Variables) 当程序停在一个断点处时,用户做些什么呢?通常用户在断点处停下来是要检查变量的值,某个变量的值是否与预料的取值相同?或者某个变量取什么值(事先并不知道这 ...
- Delphi应用程序的调试(一)
集成式调试器是Delphi IDE的一个重要特性.该调试器使用户能方便地设置断点.监视变量.检查对象等等.在运行程序时,使用该调试器能快速查找出程序发生了什么(或未发生什么).一个号的调试器对程序开发 ...
- Delphi应用程序的调试(四)The Debug Inspector
调试检查器(The Debug Inspector) Debug Inspector使用户能查看诸如类和记录的数据对象,也可以用它来查看整数.字符数组等简单数据类型,但这类简单数据类型最好是用Watc ...
- Delphi插件创建、调试与使用应用程序扩展
Delphi插件创建.调试与使用应用程序扩展 翻译 : MiracleZ 有没有使用过Adobe Photoshop?如果用过,你就会对插件的概念比较熟悉.对外行人来说,插件仅仅是从外部提供给应用程 ...
- 应用调试(五)侵入式SWI
目录 应用调试(五)侵入式SWI 场景应用 测试程序 修改APP的bin 修改SWI 获得当前进程的寄存器 测试运行 恢复代码 进程间内存拷贝 TODO 更多参考文献 title: 应用调试(五)侵入 ...
随机推荐
- e811. 创建具有嵌套菜单的弹出式菜单
See e810 创建弹出菜单 for an example on how to display a popup menu. final JPopupMenu popupMenu = new JPop ...
- windows下docker使用及注意事项
1.windows container模式下,pull镜像会失败 no matching manifest for windows/amd64 in the manifest list entries ...
- VS 调试 无法启动IIS Express Web 服务器(进程不存在)
拷贝VS2015项目 出现无法启动IIS Express Web 服务器 一.把你们拷贝刀本机的解决方案文件中的隐藏文件夹.vs删除掉 重新生产解决方案就可以启动iis express了.
- Java集合之LinkedList源码解析
LinkedList简介 LinkedList基于双向链表,即FIFO(先进先出)和FILO(先进后出)都是支持的,这样它可以作为堆栈,队列使用 继承AbstractSequentialList,该类 ...
- VS2015常用快捷键
1.回到上一个光标位置/前进到下一个光标位置 1)回到上一个光标位置:使用组合键“Ctrl + -”: 2)前进到下一个光标位置:“Ctrl + Shift + - ”. 2.复制/剪切/删除整行代 ...
- php json_encode 返回false
今天用ajax请求不到数据,发现问题出现在最后一句 echo json_encode($data); var_dump(json_encode($data));输出false 使用json_last_ ...
- linux 使用supervisor来管理进程
现在假设一个脚本是,hello.py,内容是 fo = open('xx.txt','w') while 1: fo.write('hello world') print('hi') time.sle ...
- selenium +chrome headless Adhoc模式渲染网页
mannual和adhoc模式比较 Manual vs. Adhoc In the script above, we start the ChromeDriver server process whe ...
- PMP用语集
AC actual cost 实际成本 ACWP actual cost of work performed 已完工作实际成本 BAC budget at completion 完工预算 BCWP b ...
- Linux+Redis实战教程_day03_4、通用redis命令【重点】
4.通用redis命令[重点] Redis五种数据类型,String,hash,list,set,有序set l keys pattern:获取所有与pattern匹配的key,返回所有与该key匹配 ...


