第十二章-异常处理与程序调试(三)(1)

12.4.3 断点的使用 

12.4.3.1 设置断点 

设置断点首先在Code Editor中选定你想设置断点的代码行,而后进行如下的任一种操作:

● 单击选定代码行左边的空白

● 按F5

● 选择Code Editor加速菜单的Toggle BreakPoint项

● 选择Run|Add Breadpoint打开断点编辑对话框(Edit BreakPoint Dialog Box),而后选择New去确认一个新的断点设置或选择Modify去对一个存在的断点进行修改

● 从BreakPoint List加速菜单中选择Add BreakPoint项 

断点必须位于可执行代码行上,凡设置在注释、空白行、变量说明上的都是无效的。另外,断点既可以在设计状态下设置也可以在运行调试状态下设置。 

12.4.3.2 断点的操作 

断点列表窗口(BreakPoint List Window)列出了所有断点所在的源文件名、行号、条件以及已通过的次数。如果一个断点非法或失去功能,则在列表窗口中变灰。

断点列表窗口可以通过选择View|BreakPoint菜单打开。

断点列表窗口是断点操作的基础。

1.显示和编辑断点处的代码

利用断点列表窗口可以快速找到断点在源代码中的位置。

首先选定断点而后从加速菜单中选择View Source或Edit Source。此时Code Editor更新,显示该断点位置处的代码。如果选择的是View Source,则断点列表窗口仍保持活动;如果选择的是Edit Source,则Code Editor获得输入焦点,可以在断点位置修改源代码。

2.断点功能的丧失和恢复

使断点失去功能可以使断点从当前程序运行中隐藏起来。假如你定义了一个断点当前并不需要,但可能在以后使用,则这一功能是很有用的。

断点列表窗口加速菜单的Disable BreakPoint和Disable All BreakPoints项可以使当前选中断点或所有断点失去功能。

加速菜单中的Enable BreakPoint和Enable All BreakPoint 可以使相应断点恢复功能。

3.断点的删除

断点删除可以从Code Editor或断点列表窗口中进行。

从Code Editor:

● 把光标停到包含断点的行并按F5(或选择加速菜单的Toggle BreakPoint)

● 单击包含断点行左边的终止符 

从断点列表窗口:

● 选中欲删除的断点并选择加速菜单的Delete BreakPoint项

● 删除当前所有断点,则选择加速菜单的Delete All BreakPoints项 

12.4.3.3 修改断点属性 

断点列表窗口双击选定断点或从加速菜单中选择Edit BreakPoint项,可以打开断点编辑对话框,用于显示和修改断点的属性。

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

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

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

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

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

对如下一段程序: 

var

i,Re,s: Integer ;

begin

s := 1;

Re := 0;

for i:=1 to 100 do

Re:=Re+s*i ;

end; 

在 Re := Re + s*i; 一行设置一断点。

若条件设置为: 

Condition : i = 3

Pass Count: 4

则当程序中止时检测i 的值为7。 

12.4.3.4 断点和程序执行点颜色的设置 

选择Option|Environment进入环境设置对话框而后选择Editor Colors页标签。此时即可对有关项按自己的希望设置背景和前景色。 

12.4.4 监视数据的值 

内置调试器提供了如下的工具用于监视程序中数据的值:

● 监视列表窗口

● 计算/修改对话框

● 调栈窗口

时间: 2025-01-21 13:50:00

第十二章-异常处理与程序调试(三)(1)的相关文章

第十二章-异常处理与程序调试(二)(5)

12.4 程序调试简介 Delphi提供了一个功能强大的内置调试器(Integrated Debugger), 因而对程序的调试不用离开集成开发环境(IDE)就可以进行. 程序错误基本可以分为两类,即运行时间错和逻辑错.所谓运行时间错是指程序能正常编译但在运行时出错.逻辑错是指程序设计和实现上的错误.程序语句是合法的,并顺利执行了,但执行结果却不是所希望的. 对于这两类错误,调试器都可以帮助你快速定位错误,并通过对程序运行的跟踪和对变量值的监视帮助你寻找错误的真正原因和解决错误的途径. 程序调试

第十二章-异常处理与程序调试(三)(2)

12.4.4.1 监视表达式 监视列表窗口(Watch List Window)显示程序运行中当前监视表达式的值. 选择View|Watches可以打开监视列表窗口. 从Code Editor中添加一个监视表达式最方便的方法是: 1.选中要监视的表达式: 2.从Code Editor加速菜单中选择Add Watch把表达式添加到监视列表窗口. 也可以利用下面的方法产生一个监视表达式: 1.用下列方法之一打开监视属性对话框(Watch Properties Dialog Box): ●主菜单中选择

第十二章-异常处理与程序调试(一)(1)

在应用程序开发中如何检测.处理程序的运行错误是一个很重要的问题.在 Delphi 的集成开发环境( IDE )中提供了一个完善的内置调试器,可以帮助你发现大部分程序错误.但并不是所有的错误都可以被发现,而且当程序涉及到与外设的数据交换或操作外设,如要求用户输入.读写磁盘等时,错误的发生是程序无法控制的,如输入非法字符.磁盘不能读写等.这些情况不仅会导致应用程序异常中止而且可能引起系统的崩溃.针对这些问题,Delphi同时提供了一套强大的异常处理机制.巧妙地利用它,可以使你的程序更为强健,使用更为

第十二章-异常处理与程序调试(二)(4)

12.3.6 利用异常响应编程 利用异常处理机制不仅能使程序更加健壮,而且也提供了一种使程序更加简捷.明了的途径.事实上,使用自定义异常类就是一种利用异常响应编程的方式.这里我们再讨论几个利用标准异常类编程的例子. 比如为了防止零作除数,可以在进行除法运算前使用if-then-else语句.但如果有一系列这样的语句则繁琐程度是令人难以忍受的.这时候我们可能倾向于使用EDivByZero异常.例如如下一段程序就远比用if-then-else实现简捷明了. function Calcu(x,y,z,

第十二章-异常处理与程序调试(二)(3)

12.3.5.1 定义异常对象类 异常是对象,所以定义一类新的异常同定义一个新的对象类型并无太大区别.由于缺省异常处理只处理从Exception或Exception子类继承的对象,因而自定义异常类应该作为Exception或其它标准异常类的子类.这样,假如在一个模块中引发了一个新定义的异常,而这个模块并没有包含对应的异常响应,则缺省异常处理机制将响应该异常,显示一个包含异常类名称和错误信息的消息框. 下面是一个异常类的定义: type EMyException = Class(Exception

第十二章-异常处理与程序调试(二)(2)

12.3.3 响应一族异常 诸如 on ExceptionType do 的异常响应语句不仅可响应本类异常,而且可以响应子类异常.对于象EIntError.EMathError等系统不会引发的异常,它们将只响应其子类异常.而对于象 on Exception do 这样的语句将会对任何异常进行响应. 下面一段代码对整数越界异常进行单独处理,而对其它整数异常进行统一处理: try {整数运算} except on ERangeError do {越界处理} on EIntError do {其它整数

第十二章-异常处理与程序调试(二)(1)

异常响应为开发者提供了一个按自己的需要进行异常处理的机制.try -except -end形成了一个异常响应保护块.与finally不同的是:正常情况下except 后面的语句并不被执行,而当异常发生时程序自动跳到except,进入异常响应处理模块.当异常被响应后异常类自动清除. 下面的例子表示了文件打开.删除过程中发生异常时的处理情况: uses Dialogs; var F: Textfile; begin OpenDialog1.Title := 'Delete File'; if Ope

第十二章-异常处理与程序调试(一)(5)

12.1.3 部件异常类 12.1.3.1 通用部件异常类 通用部件异常类常用的有三个:EInvalidOperation.EComponentError.EOutOfResource.其中EInvalidOperation.EOutOfResource在Controls单元中定义:EComponentError在Classes单元中定义. 1.非法操作异常 EInvalidOperation EInvalidOperation 引发的原因可能有: ● 应用程序试图对一个Parent属性为nil

第十二章-异常处理与程序调试(一)(3)

12.1.1.4 浮点异常 浮点异常是在进行实数操作时产生的,它们都从一个EMathError类派生,但与整数异常相同,程序运行中引发的总是它的子类EInvalidOp.EZeroDivide.EOverFlow.EUnderFlow. 表12.4 浮点异常类及其引发原因 ━━━━━━━━━━━━━━━━━━━━━━━━ 异常类 引发原因 ──────────────────────── EInvalidOp 处理器碰到一个未定义的指令 EZeroDivide 试图被零除 EOverFlow 浮