`

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

 
阅读更多

一、 编译和运行

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按钮确认并更新数据项。这种修改只影响特定的程序运行。

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

分享到:
评论

相关推荐

    论程序的调试技巧(一些心得体会蕴含着曾经的教训)

    文结合作者自身经验,对竞赛中程序的调试技巧做了详细的阐述和总结。在介绍了编程中常见的错误类型和集成环境的调试工具之后,给出了一般调试流程,并着重讲述了其中的动态查错技巧,做了一定的归纳。最后通过一个...

    程序开发中的错误及原因.md

    教程涵盖了常见的错误类型,包括语法错误、名称错误、类型错误、逻辑错误和异常错误。每种错误类型都提供了具体的原因和示例代码,帮助读者理解错误的来源。此外,教程还提供了一些排查错误的技巧和建议,如仔细检查...

    McGraw C++程序调试实用手册

    3.2 四种程序错误类型 3.2.l 语法错误 3.2.2 连接错误 3.2.3 运行错误 3.2.4 逻辑错误 3.3 查看错误消息 3.4 预防性维护 3.4.l 桌面检查的含义 3.5 异常处理设计 3.6 “请多多支持” 3.7 Microsoft ...

    Visual C++ 数据库系统开发完全手册.part1

    第9章 程序调试与错误处理 9.1 概述 9.2 断点跟踪 9.3 调试窗口 9.3.1 Watch窗口 9.3.2 Call Stack窗口 9.3.3 Memory窗口 9.3.4 Variables窗口 9.3.5 Registers窗口 9.3.6 Disassembly窗口 9.4 错误处理 9.4.1 捕捉...

    Linux程序设计 第4版.haozip01

    10.2 常用调试技巧 362 10.2.1 有漏洞的程序 362 10.2.2 代码检查 364 10.2.3 取样法 365 10.2.4 程序的受控执行 367 10.3 使用gdb进行调试 368 10.3.1 启动gdb 368 10.3.2 运行一个程序 369 10.3.3 栈跟踪 ...

    Linux程序设计 第4版.haozip02

    10.2 常用调试技巧 362 10.2.1 有漏洞的程序 362 10.2.2 代码检查 364 10.2.3 取样法 365 10.2.4 程序的受控执行 367 10.3 使用gdb进行调试 368 10.3.1 启动gdb 368 10.3.2 运行一个程序 369 10.3.3 栈跟踪 ...

    JAVA语言程序设计课程教学大纲.doc

    (3)在对Java程序的调试过程中,提高学生分析程序中出现的错误和排除这些错误 的能力。 (4)通过上机实践,加深学生对计算机软件运行环境,以及对操作系统与计算机语 言支持系统相互关系的了解。 三、实践内容 ...

    可视化程序设计(VB)课件_东北大学

    掌握 Win32应用程序设计的方法和技巧;掌握程序设计的基本思想,结合实践教学培养和提高应用计算机解决实际问题的能力。 三、教学要求 掌握VB程序设计语言的基础语法和常用控件的基本使用方法,了解程序设计的一般...

    delphi 开发经验技巧宝典源码

    0058 String类型和Pchar类型的用法和区别 36 0059 如何捕获异常 37 0060 TStrings与TStringList的使用 37 0061 如何实现窗体文件转换 37 第3章 程序算法 39 3.1 计算类算法 40 0062 如何计算1~100的...

    三个VC++程序精灵编程源码实例

     压缩内有三个不同样式、不同动画形式的程序精灵,每个都能顺利编译,根据你的喜好和程序类型请自己选择  下载页面 三个VC++程序精灵编程源码实例 .rarchina-code.net.zhy.2010410213556704231.Rar本地连接- ...

    语言程序设计课后习题答案

    C++是一个更好的C,它保持了C的简洁、高效、接近汇编语言、具有良好的可读性和可移植性等特点,对C的类型系统进行了改革和扩充,因此C++比C更安全,C++的编译系统能检查出更多的类型错误。 C++语言最重要的特点是...

    黑龙江大学面向对象程序设计Java实验讲义软件样本.doc

    (3) 在对Java 程序调试过程中,提高学生分析程序中浮现错误和排除这些错误能力。 (4) 通过上机实践,加深学生对计算机软件运营环境、Java 集成开发环境理解。 实验规定 《Java语言程序设计实验》是与《Java语言程序...

    计算机二级C的出题范围.doc

    同时,应掌握C语言程序设计的基本流程、程序设计思路、程序设计技巧,以及程序设计中的常见错误和调试技巧。 至于具体的出题形式,计算机二级C语言程序设计考试一般包括单项选择题、程序填空题、程序改错题和程序...

    设计一个电子通讯录程序-课程设计.docx

    〔3〕在VC++6.0环境中,学会调试程序的方法,及时追究错误,独立调试完成。 〔4〕程序调试通过后,完成程序文档的整理,加必要 注释。 创新要求 在根本到达题目要求外,进行创新设计,如界面优美、功能更加完善〔如...

    Jquery Ajax Error 调试错误的技巧

    JQuery使我们在开发Ajax应用程序的时候提高了效率,减少了许多兼容性问题,我们在Ajax项目中,遇到ajax异步获取数据出错怎么办,我们可以通过捕捉error事件来获取出错的信息。 在没给大家介绍正文之前先给分享Jquery...

    delphi 开发经验技巧宝典源码06

    0058 String类型和Pchar类型的用法和区别 36 0059 如何捕获异常 37 0060 TStrings与TStringList的使用 37 0061 如何实现窗体文件转换 37 第3章 程序算法 39 3.1 计算类算法 40 0062 如何计算1~100的...

    徐串论文1

    【摘要】本文结合作者自身经验,对竞赛中程序的调试技巧做了详细的阐述和总结。在介绍了编程中常见的错误类型和集成环境的调试工具之后,给出了一般调试流程,并着重讲述了

    SQL Server 2008高级程序设计 2/6

    然后在更详实的示例代码的引导下全面深入地展开论述,讨论了如何编写复杂查询、构建各种数据结构以及提高应用程序性能,还讲述了如何管理高级脚本和数据库以及如何确定和改正脚本错误。  本书提供了快速创建和部署...

    PHP程序开发范例宝典III

    代码都经过精心调试,在Windows XP/Windows 2000/Windows 2003 Server/Linux/UNIX下测试通过。 PHP程序开发范例宝典 目录 第1章 PHP的运行环境配置 1 1.1 Windows下环境配置 2 实例001 Windows下...

Global site tag (gtag.js) - Google Analytics