Delphi断点调试-初级

摘要:
可以在程序中设置多个断点,并且可以为断点设置条件。1、 应在代码编辑器中设置源代码断点。[文件名]框用于输入断点所在的源文件名(包括路径)。行号框用于输入断点的行号。[Condition]框用于设置断点的有效条件。在For循环中设置了断点,但程序不会在每次遇到断点时暂停。其次,机器指令断点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所示。
 
Delphi断点调试-初级第1张
 
                      源代码断点1
Delphi断点调试-初级第2张
 
                      源代码断点2
 
当鼠标指向这个小圆圈时,将弹出一个提示窗口,显示断点的条件和经过次数。
 
二、机器指令断点
Delphi 允许针对某个机器指令设断点。当程序执行到这个指令时,就会暂停(必须执行到 断点处设置)。要设置机器指令断点,有下列几种方式。
 
(1)  在 CPU 窗口中用鼠标左键单击某个指令 的装订区。
 
(2)  在 CPU  窗口中选择一个指令,然后按F5键。
 
(3)  在 CPU 窗口中用鼠标右键单击某个指令, 在弹出的菜单中选择【Toggle breakpoint】命令。
 
(4)  使用【Run】菜单中的【Add Breakpoint】命令,再选择【Address Breakpoint】,弹出【Add Address Breakpoint】对话框,如图 机器断点1所示。
 
Delphi断点调试-初级第3张
                  机器断点1
 
三、数据断点
 
Delphi 能够监视指针错误。如果内存的某个地址被改写,程序就会暂停,由调试器接管控制权,就好 像遇到断点一样。
 
要设置这样的断点,可以使用【Run】菜单中的【Add Breakpoint】命令,再选择【Data Breakpoint】, 出现【Add Data Breakpoint】对话框,如图 数据断点1所示。
 
【Address】框用于指定要监视的内存地址。可以键入一个变量名。
 
【Length】框用于指定数据的长度(字节数)。如果 在【Address】框中键入的是一个变量名,则【Length】
 
 
Delphi断点调试-初级第4张
 
图  数据断点1   【Add Data Breakpoint】对话框框可以空白,因为 Delphi 会自动计算出该变量的长度。
 
【Condition】框用于设置断点有效的条件,通常是一个布尔表达式。
 
【Pass count】框用于指定经过断点多少次后断点有效。
 
【Group】框用于把断点进行分组。 要说明的是,当本次调试结束时,所有的数据断点都会被禁止。下次调试时,如果还要用到这些数据断点,需要使它们有效。
 
 
四、模块断点
 
要监视模块的第一次加载,可以使用【Run】菜单中的【Add Breakpoint】命令,再选 择【Module Load Breakpoint】,出现【Add Module】对话框,如图 模块断点1 所示。
Delphi断点调试-初级第5张
模块断点1
在【Module  Name】框内指定一个要监视的模块,通常是 DLL 或 BPL。也可以单击
 
【Browser】按钮定位一个模块。以后,当这个模块第一次被调入内存时,程序就会暂停, 由调试器接管控制权,就好像遇到断点一样。
 
五、指定遇到断点时的行为
一般来说,当遇到断点时,程序将暂停。不过,在
 
Delphi 中,除了使程序暂停外,还可以指定其他行为。 要指定遇到断点时的行为,可以在设置断点时进行。
 
使用【Run】菜单中的【Add Breakpoint】命令,再选择 一种断点类型,Delphi 将打开【Add Breakpoint】对话框。 然后,单击【Advanced】按钮,弹出【Add Breakpoint】 对话框,如图 断点行为 所示。
 
如果选中【Break】复选框,当遇到断点时,程序将暂停。这是默认的行为。
 
如果选中【Ignore subsequent exceptions】复选框, 以后将忽略当前进程触发的异常,也就是说,遇到异常时调试器不会停止。这个复选框与下面的【Handlesubsequent exceptions】复选框成对使用,可以使一段代 码忽略异常。
 
如果选中【Handle subsequent exceptions】复选框,以后将处理当前进程触发的异常,也就是说,当调试器 遇到【Debugger Options】对话框中指定的异常时将停止。
 
 Delphi断点调试-初级第6张
 
                   指定遇到断点时的行为
 
 
【Log message】框用于让用户指定一个消息。当遇到断点时,将记载这个消息。
 
【Eval expression】框用于让用户指定一个表达式。如果下面的【Log result】复选框被 选中的话,当遇到断点时,将计算这个表达式并记载计算结果。
 
【Enable group】框可以使一组断点有效。
 
【Disablegroup】框可以禁止一组断点。 如果一个断点被指定了多个行为,则当遇到断点时,将依次执行这些行为。
 
六、断点列表窗口
如果定义了很多断点,或者断点不在当前的编辑窗口中,可以通过断点列表窗口来查找断点并且在源代码中定位它。
 
使用【View】菜单中的【Debug  Windows】命令,再选择【Breakpoints】,Delphi 将 打开断点列表窗口,如图 断点列表 所示。
 
Delphi断点调试-初级第7张
             断点列表
 
对于源代码断点来说,断点列表窗口将显示断点所在的源文件名称、行号、条件和经过次数。
 
对于机器指令断点来说,断点列表窗口将显示断点所在的源文件名称、行号加一个16进制的偏移量,这个偏移量就是该指令距离源代码行机器指令起始点的字节数。不过,有 时候,一条机器指令并不一定对应着一条源代码行,此时,就不显示行号。
 
对于数据断点,断点列表窗口将显示数据的名称或地址以及长度。
 
Delphi 的断点列表窗口还有两栏,分别用于显示断点的行为和所属的组名。 要在源代码中定位断点所在的行,或者在 CPU 窗口中定位断点所在的机器指令,可以在断点列表窗口中用鼠标右键单击某个断点,在弹出的菜单中选择【View Source】或【Edit Source】命令。如果选择【ViewSource】命令,光标将定位于要找的断点上,但断点列表窗口仍然是当前活动的窗口,以便继续在断点列表窗口中查找其他断点。如果选择的是【EditSource】命令,代码编辑器将成为当前活动的窗口,这样就可以编辑源代码。
 
七、删除断点
 
删除断点并不是删除断点所在的行或指令,只是取消断点的定义,程序执行到这儿不会暂停。
 
如果仅仅要删除一个断点,有下列几个操作方式。
 
(1)  在断点列表窗口中用鼠标右键单击断点,在弹出的菜单中选择【Delete】命令。
 
(2)  在断点列表窗口中选择一个断点,然后按 Delete 键或按 Ctrl+D 键。
 
(3)  在代码编辑器或 CPU 窗口中用鼠标右键单击断点,在弹出的菜单中选择【Debug】 命令,再选择【Toggle Breakpoint】。
 
(4)  在代码编辑器或 CPU 窗口中把光标移到断点上,按下 F5 键。 (5) 在代码编辑器或 CPU 窗口中用鼠标左键单击断点的最左端。如果要删除所有断点,可以在断点列表窗口中单击鼠标右键,在弹出的菜单中选择【DeleteAll】命令。
 
————————————————
 
原文链接:https://blog.csdn.net/sushengmiyan/article/details/8674989

免责声明:文章转载自《Delphi断点调试-初级》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇第三方库-正则re27、Windows内核编程,IRP的同步(1)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

04_RHEL7.1忘记root密码

在开机进入启动项时,选择需要重设密码的那个启动项 按e进入编辑模式,找到rhgb和quiet参数(几乎在最下面),替换为 init=/bin/sh 按ctrl+X不需密码进入shell 以rw的方式重新挂载 sh-4.2 # mount –o remount,rw/   运行passwd,并按提示修改root密码 如何之前系统启用了...

C#图解教程 第二十章 异步编程

笔记 异步编程 什么是异步 示例 async/await特性的结构什么是异步方法 异步方法的控制流await表达式取消一个异步操作异常处理和await表达式在调用方法中同步地等待任务在异步方法中异步地等待任务Task.Delay方法 在GUI程序中执行异步操作 Task.Yield 使用异步Lambda表达式完整的GUI程序BackgroundW...

防止表单重复提交的方法

1、在jsp页面的button添加相关js代码: <input type="button" value="提交" onclick="this.disabled=true;this.form.submit()"> 此方法缺点是用户可能禁用js,此方法就可能失效。 2、session的token机制...

SSH SecureCRT介绍以及相关使用配置

SSH ==>SSH是什么? - SSH是Secure Shell的缩写,由IETF的网络工作小组制定 - SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议 - SSH 为建立在应用层和传输层基础上的安全协议 - 利用SSH协议可以有效防止远程管理过程中的信息泄露问题 - SSH最初是U N I X系统上的一个程序,后来又迅速扩展...

Linux下输出 excel文件

Linux下输出 excel文件 今日提供给产品需求,需excel文件,故总结要点如下:  1.默认间隔是space_20 2.修改为TAB   _09 awk '  BEGIN { OFS=" "} ;{ $1=$1 ; print $0} ' aa.txt>aa.xls   Ps :        1.查看工具 od -x -c    ue  ...

Python——cmd调用(os.system阻塞处理)(多条命令执行)

os.system(返回值为0,1,2)方法 0:成功 1:失败 2:错误 os.system默认阻塞当前程序执行,在cmd命令前加入start可不阻塞当前程序执行。 例如:         import os         os.system(r"start E:TXqq.exe")    如路径有空格,单引号包上双引号就OK os.popen(可将c...