程序的编译、运行和调试
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.5 程序的编译、运行和调试(1)
2.5.1 编译和运行
应用程序开发的最后一步就是编译、运行,检查程序错误,并提供用户最终可使用的程序。Delphi 7提供了两种方法对程序进行编译:
(1)使用Project菜单中的Compile命令。该命令编译当前项目中所有修改过的文件(自上次生成执行文件以来),生成可执行的EXE文件。如果使用项目组,且要编译项目组中的所有项目,使用Compile All Projects命令。
(2)使用Project菜单中的Build命令。该命令编译当前项目中的所有文件,生成可执行的EXE文件,而不管这些文件修改没有。如果使用项目组,且要编译项目组中所有项目,使用Build All Projects命令。
Delphi 7编译器在生成EXE文件时,遵循下列规则:
(1)项目文件(.DPR)每次都要被编译。
(2)如果一个单元的源代码自上次编译后修改过,该单元就要再编译。单元编译后,会生成一个带有.DCU扩展名的文件。
(3)如果Delphi不能定位一个单元的源代码,则那个单元不被编译。
(4)如果一个单元的interface(接口)部分被修改,则所有使用到该单元的单元都要被重新编译。
(5)如果一个单元连接了一个OBJ文件,则OBJ文件一旦被修改,该单元也要被编译。(6)如果一个单元包含一个Include文件,则Include文件一旦被修改,该单元也要被修改。为了显示编译进度和结果,可以选择Tools菜单中Environment Options命令,在对话框中选择Preferences选项卡,从中选择Show compile progress(显示编译进度)选项。如图2.21所示。
如果程序编译成功,单击OK按钮,关闭编译对话框。如果遇到错误,Delphi 7在代码编辑器的状态行报告错误,并把光标定位在包含错误代码的程序行上。出错后的窗体界面如图2.22所示。
要运行程序,可以使用Run菜单中的Run命令,或单击加速条上的Run按钮。该命令同样要编译当前项目中自上次生成执行文件以来所有修改过的文件,生成可执行的EXE文件,并运行该程序。
2.5.2 调试
Delphi提供了一个功能强大的Integrated Debugger(内置调试器),因而对程序的调试不用离开集成开发环境就可以进行。
程序错误基本可以分为两类,即运行时错误和逻辑错误。所谓运行时错误是指程序能正常编译但在运行时出错。逻辑错误是指程序设计和实现上的错误,程序语句是合法的,并顺利执行了,但执行结果却不是所希望的。
对于这两类错误,调试器都可以帮助你快速定位错误,并通过对程序运行的跟踪和对变量值的监视帮助你寻找错误的真正原因和解决错误的途径。
程序调试的主要内容可以概括为如下几方面:
(1)准备和开始;
(2)控制程序的执行;
(3)断点的使用;
(4)检查数据的值。
程序调试只有用户实际上机操作才能真正掌握。在这一节中我们主要对调试中的主要问题和一些关键点进行介绍。
1. 调试的准备和开始
在程序开发过程中程序编码和调试是一个持续的循环过程,只有在对程序进行了彻底地测试后才能交付最终用户使用。为了保证调试的彻底性,在调试前应制定一个详细的调试计划。一般说来应该把程序划分为几个相对独立的部分,分别进行调试,以利于错误的迅速定位,确保每一部分程序都按设计的要求运行。
调试计划准备好后就可以开始程序的调试。
在程序调试过程中,程序的执行完全在我们控制之中。可以在任何位置暂停程序的执行检查变量和数据结构的值,显示函数调用序列,修改程序中变量的值以便观察不同值对程序行为的影响。
2. 调试的方法
程序运行控制的方法和使用见表2.6。
表2.6 调试方法列表
“跟踪”和“步进”都是一种单步执行方式,但“步”的含义不同。对“跟踪”而言它一次执行一条简单程序语句,当碰到包含调试信息的函数或过程调用时则跳入该函数或过程,并执行其第一条可执行语句。对“步进”而言,它一次执行一条当前模块的可执行语句,而不管该语句是否是函数或过程调用。
“运行到光标位置”和“运行到断点”都是程序正常运行到某一确定的源代码位置,而后进入调试状态。但相对于“运行到光标位置”而言,“运行到断点”更为灵活。因为断点一次可设置多个,同时也可以对断点设置一定的条件,只有满足该条件程序运行才会中止。
3. 断点的使用
(1)设置断点
首先在Code Editor中选定你想设置断点的代码行,而后进行如下的任一种操作:
1)按F5;
2)单击选定代码行左边的空白;
3)从Breakpoint List右键菜单中选择Add Breakpoint命令;
4)选择代码编辑器窗口中的右键菜单的Toggle Breakpoint命令;
5)选择Run菜单的Add Breakpoint命令,打开Edit Breakpoint Dialog Box(断点编辑对话框),而后选择New命令确认一个新的断点设置,或者选择Modify命令对一个存在的断点进行修改。
断点必须位于可执行代码行上,凡设置在注释、空白行、变量声明上的断点都是无效的。另外,断点既可以在设计状态下设置,也可以在运行调试状态下设置。
(2)Breakpoint List(断点列表)窗口
断点列表窗口列出了所有断点所在的源文件名、行号、条件以及已通过的次数。如果一个断
点非法或失去功能,则在列表窗口中变灰。
断点列表窗口如图2.24所示,可以通过选择View|Debug Windows|Breakpoint命令打开。断点列表窗口是断点操作的基础。
(3)显示和编辑断点处的代码
利用断点列表窗口可以快速找到断点在源代码中的位置。
首先选定断点而后从右键菜单中选择View Source或Edit Source命令。此时Code Editor更新,显示该断点位置处的代码。如果选择的是View Source命令,则断点列表窗口仍保持活动;如果选择的是Edit Source命令,则Code Editor获得输入焦点,可以在断点位置修改源代码。
(4)断点功能的丧失和恢复
使断点失去功能可以使断点从当前程序运行中隐藏起来。假如定义了一个断点,当前并不需要,但可能在以后使用,则这一功能是很有用的。
隐藏断点有以下的方法:
1)选择断点列表窗口右键菜单的Enable命令可以使当前选中断点失去功能。
2)代码行左边的断点标志小圆的右键菜单中的Enable命令可以使相应断点失去功能。
用同样的方法可以恢复断点。
(5)断点的删除
断点删除可以在代码编辑器或断点列表窗口中进行,有以下一些方法可以使用:
1)把光标停到包含断点的行并按F5键。
2)选择右键菜单的Debug子菜单的Toggle Breakpoint命令。
3)单击包含断点行左边的终止符。
4)在断点列表窗口进行时,选中欲删除的断点并选择右键菜单的Delete命令。
其中步骤1)~3)都是在代码编辑器中进行。
6)修改断点属性
在断点列表窗口双击选定断点或从右键菜单中选择Properties命令,可以打开Source Breakpoint Properties对话框,用于显示和修改断点的属性,
利用断点编辑对话框可以改变断点的位置,设置断点条件。
断点条件包括两种:布尔表达式和通过次数。
Condition文本框用于设置布尔表达式条件。如果表达式值为真(或非零)则程序运行在断点处中止;否则调试器将忽略该断点。
Pass count文本框用于设置通过次数条件,即只有当程序运行在该断点处通过设定次数时,程序运行才在该断点处中止。这往往用于对循环体内语句的调试。
有一点应引起注意的是:当Condition和Pass count同时设置时,Pass count是指满足条件的通过次数。
(7)断点和程序执行点颜色的设置
选择Tools菜单,再选择Editor Options命令进入代码编辑器设置对话框,而后选择Color 标签页。此时即可对有关项按自己的希望设置背景和前景色。如图2.26所示:
4. 监视数据的值
(1)监视表达式
Watch List(监视列表)窗口显示程序运行中当前监视表达式的值。
选择View命令,再选择Debug Windows子菜单,再选择Watches命令就可以打开监视列表(Watch List)窗口。如图2.27所示。
从代码编辑器中添加一个监视表达式最方便的方法是:首先在要监视的表达式所在行单击,然后从代码编辑器右键菜单中选择Debug/Add Watch at Cursorwgwy命令把表达式添加到监