调试技巧;程序错误类型。

一、 编译和运行

Delphi 7编译器在生成EXE文件时,遵循下列规则:

(1)项目文件(.DPR)每次都要被编译。

(2)如果一个单元的源代码自上次编译后修改过,该单元就要再编译。单元编译后,会生成一个带有.DCU扩展名的文件。

(3)如果Delphi不能定位一个单元的源代码,则那个单元不被编译。

(4)如果一个单元的interface(接口)部分被修改,则所有使用到该单元的单元都要被重新编译。

(5)如果一个单元连接了一个OBJ文件,则OBJ文件一旦被修改,该单元也要被编译。

(6)如果一个单元包含一个Include文件,则Include文件一旦被修改,该单元也要被修改。

二、调试技巧:

E 设置条件断点

一般来说,大家都会使用断点来调试程序,但是如何使用条件断点来调试程序呢?条件断点,顾名思义,就是指需要满足一定条件时的断点。这种断点在调试很长的For或While循环时十分有用,当你只希望看一看一个特定循环的执行情况而非所有循环时,就需要在循环中设定一个条件断点,当设定的条件满足时,Delphi停止应用程序的执行。

设置条件断点的方法是:按常规的方法建立断点,单击“View”*“Debug Windows”*“Breakpoints”命令,弹出一个断点列表窗口,用鼠标右键单击欲设置为条件断点的断点,在快捷菜单中单击“Properties”命令,打开一个断点编辑窗口,在这个窗口的条件域中输入一个逻辑表达式即可。在调试程序时,Delphi判断这个逻辑表达式,当逻辑表达式为真时,就中断程序运行,返回代码窗口。

断点条件:利用断点编辑对话框可以改变断点的位置,设置断点条件。

断点条件包括两种:布尔表达式和通过次数。

Condition文本框用于设置布尔表达式条件。如果表达式值为真(或非零)则程序运行在断点处中止;否则调试器将忽略该断点。

Pass count文本框用于设置通过次数条件,即只有当程序运行在该断点处通过设定次数时,程序运行才在该断点处中止。这往往用于对循环体内语句的调试。

有一点应引起注意的是:当Condition和Pass count同时设置时,Pass count是指满足条件的通过次数。

比如条件为,当Num等于某一个数字时。

调试

Delphi提供了一个功能强大的Integrated Debugger(内置调试器),因而对程序的调试不用离开集成开发环境就可以进行。

程序错误基本可以分为两类,即运行时错误和逻辑错误。所谓运行时错误是指程序能正常编译但在运行时出错。逻辑错误是指程序设计和实现上的错误,程序语句是合法的,并顺利执行了,但执行结果却不是所希望的。

对于这两类错误,调试器都可以帮助你快速定位错误,并通过对程序运行的跟踪和对变量值的监视帮助你寻找错误的真正原因和解决错误的途径。

程序调试的主要内容可以概括为如下几方面:

(1)准备和开始;

(2)控制程序的执行;

(3)断点的使用;

(4)检查数据的值。

程序调试只有用户实际上机操作才能真正掌握。在这一节中我们主要对调试中的主要问题和一些关键点进行介绍。

1. 调试的准备和开始

在程序开发过程中程序编码和调试是一个持续的循环过程,只有在对程序进行了彻底地测试后才能交付最终用户使用。为了保证调试的彻底性,在调试前应制定一个详细的调试计划。一般说来应该把程序划分为几个相对独立的部分,分别进行调试,以利于错误的迅速定位,确保每一部分程序都按设计的要求运行。

调试计划准备好后就可以开始程序的调试。

在程序调试过程中,程序的执行完全在我们控制之中。可以在任何位置暂停程序的执行检查变量和数据结构的值,显示函数调用序列,修改程序中变量的值以便观察不同值对程序行为的影响。

2. 调试的方法

程序运行控制的方法和使用见表2.6。

“跟踪”和“步进”都是一种单步执行方式,但“步”的含义不同。对“跟踪”而言它一次执行一条简单程序语句,当碰到包含调试信息的函数或过程调用时则跳入该函数或过程,并执行其第一条可执行语句。对“步进”而言,它一次执行一条当前模块的可执行语句,而不管该语句是否是函数或过程调用。

“运行到光标位置”和“运行到断点”都是程序正常运行到某一确定的源代码位置,而后进入调试状态。但相对于“运行到光标位置”而言,“运行到断点”更为灵活。因为断点一次可设置多个,同时也可以对断点设置一定的条件,只有满足该条件程序运行才会中止。

监视数据的值

(1)监视表达式

Watch List(监视列表)窗口显示程序运行中当前监视表达式的值。

选择View命令,再选择Debug Windows子菜单,再选择Watches命令就可以打开监视列表(Watch List)窗口。如图2.27所示。

图2.27 Watch List窗口

从代码编辑器中添加一个监视表达式最方便的方法是:首先在要监视的表达式所在行单击,然后从代码编辑器右键菜单中选择Debug/Add Watch at Cursorwgwy命令把表达式添加到监视列表窗口。

也可以利用下面的方法产生一个监视表达式:

1)用下列方法之一打开Watch Properties(监视属性)对话框,如图2.28所示。

图2.28 Watch Properties对话框

· 从主菜单中选择Run/Add Watch命令。

· 在光标处从代码编辑器右键菜单中选择Add Watch命令。

· 按Ctrl+F5键。

· 双击监视列表窗口中的一个监视表达式。

· 从监视列表窗口选定一个表达式而后从右键菜单中选择Edit命令。

2)在监视属性对话框的Expression下拉列表框中输入或选择一个被监视的表达式。

3)设定表达式的显示格式和使用状态。

与断点类似,利用右键菜单也可以使监视表达式功能丧失、恢复或删除监视表达式。

5. 计算/修改表达式

选择Run/Evaluate/Modify命令可打开计算/修改(Evaluate/Modify)对话框,如图2.29所示。

当单击Evaluate按钮时,Expression下拉列表框中表达式的值显示在Result域中。

Expression下拉列表框中可以输入或选择任何合法的表达式(包括对象的属性),但不包括:

· 包含有当前执行点不能引用的局部或静态变量的表达式。

· 函数或过程调用。

Expression下拉列表框中的表达式可以带特定的格式字符,用于规定其显示格式。格式字符及其功能见表2.7。

表2.7 格式字符及其功能

修改表达式的值常用于验证错误解决方案的正确性。在Expression下拉列表框中输入或选定想修改的表达式,单击 Evaluate按钮观察表达式的当前值。而后在New Value下拉列表框中输入或选中一个新值,单击Modify按钮确认并更新数据项。这种修改只影响特定的程序运行。

修改表达式的值(特别是指针变量和数组下标)可能会引起无法预计的后果,因而使用中要特别小心。

你可能感兴趣的:(调试)