delphi初级教程之delphi断点调试一
所谓断点,就是在程序代码的某一行上设置一个标记,程序执行到这里将暂停,由调 试器接管对程序的控制。使用断点与使用【Runto Cursor】命令有些相似,都是执行到某 一行后暂停。不同的是,程序中可以设置多个断点并且能够给断点设置条件。
断点通常设置在有疑点的区域。在遇到断点之前,程序以全速运行。遇到断点之后,程序暂时停止运行,以后就可以单步或跟踪执行程序。
一、源代码断点
要在代码编辑器中设置源代码断点,有以下 4 种操作方式。
(1) 把光标移到要设为断点的行上,按下 F5 键。
(2) 用鼠标左键单击要设为断点的行的最左端。
(3) 用鼠标右键单击要设为断点的行,在弹出的菜单中选择【Debug】命令,再选择【ToggleBreakpoint】。
(4) 使用【Run】菜单中的【Add Breakpoint】 命令,再选择【SourceBreakpoint】,Delphi 将 打开【Add Source Breakpoint】对话框,如图 源代码断点1所示。
【Filename】框用于输入断点所在的源文件名(包含路径)。
【Line number】框用于输入断点所在的行号。
【Condition】框用于设置断点有效的条件,通常是一个布尔表达式。布尔表达式中可 以包含函数调用,只要该函数返回布尔值即可。
当程序执行到这个断点时,首先计算该布尔表达式的值。如果值为 True,则断点有效, 程序将暂停运行。如果值为 False,则断点无效,程序将继续执行。
【Pass count】框用于指定经过断点多少次后断点有效。例如,在一个 For 循环中设置 一个断点,每次循环时都会遇到这个断点。但并非每次遇到断点时程序都会暂停,因为还需要经过一定次数后断点才有效。
【Group】框用于对断点进行分组。可以在这个框内输入一个新的组名,也可以选择一 个已有的组名。一旦若干个断点编成组,就可以分别使用【Disable Group】命令和【Enable Group】命令成组地被禁止或允许它们,还可以给一组断点指定一系列动作。
注意:设为断点的行必须是可执行的代码行。如果把断点设在注释行、空行、变量声明的行上,调试器将认为断点无效。
默认情况下,断点所在的行用白底红字显示,并且在装订区有一个红色的小圆圈。如图 源代码断点2所示。
源代码断点1
源代码断点2
当鼠标指向这个小圆圈时,将弹出一个提示窗口,显示断点的条件和经过次数。
二、机器指令断点
Delphi 允许针对某个机器指令设断点。当程序执行到这个指令时,就会暂停(必须执行到 断点处设置)。要设置机器指令断点,有下列几种方式。
(1) 在 CPU 窗口中用鼠标左键单击某个指令 的装订区。
(2) 在 CPU 窗口中选择一个指令,然后按F5键。
(3) 在 CPU 窗口中用鼠标右键单击某个指令, 在弹出的菜单中选择【Toggle breakpoint】命令。
(4) 使用【Run】菜单中的【Add Breakpoint】命令,再选择【Address Breakpoint】,弹出【Add Address Breakpoint】对话框,如图 机器断点1所示。
机器断点1
三、数据断点
Delphi 能够监视指针错误。如果内存的某个地址被改写,程序就会暂停,由调试器接管控制权,就好 像遇到断点一样。
要设置这样的断点,可以使用【Run】菜单中的【Add Breakpoint】命令,再选择【Data Breakpoint】, 出现【Add Data Breakpoint】对话框,如图 数据断点1所示。
【Address】框用于指定要监视的内存地址。可以键入一个变量名。
【Length】框用于指定数据的长度(字节数)。如果 在【Address】框中键入的是一个变量名,则【Length】
图 数据断点1
【Add Data Breakpoint】对话框框可以空白,因为 Delphi 会自动计算出该变量的长度。
【Condition】框用于设置断点有效的条件,通常是一个布尔表达式。
【Pass count】框用于指定经过断点多少次后断点有效。
【Group】框用于把断点进行分组。 要说明的是,当本次调试结束时,所有的数据断点都会被禁止。下次调试时,如果还要用到这些数据断点,需要使它们有效。