13.1.2 断点

KeilµVision3集成开发环境中,内建了完善的断点调试功能。当程序仿真执行到断点位置的时候便会自动停止,然后可以对程序执行的结果进行观察,或者修改相应的存储器、寄存器以及外部端口的值,以便于进一步的代码调试。

1.断点的种类

在KeilµVision3集成开发环境中,包括如下3种断点类型。

❑执行断点。当代码运行至指定的代码地址时,执行断点将停止程序运行或者执行一条预设的命令。一般来说,一个代码地址只能设置一个执行断点,而且代码地址必须是一个指令的第一个字节的地址,否则断点将不能执行。执行断点不影响代码的执行速度。

❑条件断点。条件断点为一个条件表达式,每执行一条指令都将重新计算一下条件表达式。如果达到指定的条件,条件断点将停止程序运行或者执行一条预设的命令。条件断点的使用非常灵活,但是由于需要计算条件表达式,因此会影响代码的执行速度。

❑存取断点。当一个指定的地址被读或者写的时候,存取断点将停止程序运行或者执行一条预设的命令。存储器的存取断点对代码执行速度的影响不大,因为只有在存取指定地址的时候才执行断点。

在KeilµVision3集成开发环境中使用上述断点时,需要注意如下几点。

❑当设置断点时仅指定地址,则该断点为执行断点。

❑当设置断点时设置了断点表达式,则该断点为条件断点。

❑条件断点中的断点表达式应该条件明确,尽量简单,以防止过多地影响代码执行速度。

❑当设置断点时,指定存储器的存储模式为Read或者Write时,则该断点为存取断点。

❑断点可以执行一条预设的命令。

2.断点的设置

在KeilµVision3集成开发环境中,最简单的断点可以通过双击源代码的某一行来放置一个断点。断点在源代码窗口的左侧以红色块显示,如图13.2所示。简单断点也可以通过主菜单、右键菜单或工具栏来实现。

对于一些复杂的断点,可能需要使用带有条件的表达式,并且断点处执行一条指令。这些复杂的断点管理,可以在断点属性对话框中来设置。对于这些复杂断点的操作步骤如下。

13.1.2 断点 - 图1

图 13.2 设置简单断点

(1)首先双击源代码的某一行,设置一个断点。

(2)选择“Debug”→“Start/Stop Debug Session”命令,进入程序仿真调试环境。

(3)选择“Debug”→“Breakpoints”命令,打开断点属性对话框,如图13.3所示。

在“Breakpoints”对话框中,可以定义新断点,以(E)标识。在“Expression”文本框中输入表达式,可以定义前面介绍过的3种断点。

13.1.2 断点 - 图2

图 13.3 断点属性对话框

❑如果表达式为一个地址,则定义的是执行断点。此时,可以在“Command”文本框中输入断点处执行的命令。

❑如果选择的是一个存储器的读写操作,则定义的是存取断点,以(A)标识。可以使用字节数来指定存储器范围的大小以及表达式的目标大小。当程序访问指定存储器的时候,断点被激活。

❑如果表达式不能写成地址,则定义的是一个条件断点,以(C)标识。每次执行CPU指令后,便重新计算表达式,当条件表达式为真时激活断点。

断点也可以设置成由计数触发,当计数减少到0时才触发断点,由“Count”下拉列表来设置。如果此时包含条件表达式,则Count值为断点激活前断点表达式为真的次数。