CCS11用户界面介绍2

  • 导读
  • 1. 目标配置文件
  • 2. Debug模式下的各界面
  • 2.1. GUI界面
  • 2.2. 调试功能介绍
  • 2.3 Debug view(调试视图)
  • 2.4 Watching Variables, Expressions, and Registers
  • 2.5 Disassembly View(反汇编视图)
  • 2.6 Memory Browser View
  • 2.7. Console View(控制台视图)
  • 2.8. Memory Allocation
  • 2.9. Optimizer Assistant
  • 2.10. Stack Usage
  • 3. Debug Configurations(调试配置)
  • 4. Breakpoints(断点)
  • 4.1. 软件断点、硬件断点
  • 4.2. 断点属性
  • 4.3. Watchpoints
  • 4.4. Conditional Breakpoints
  • 4.5. Breakpoints View
  • 后记


导读

本文主要介绍CCS11的Debug界面。

在 CCS 环境中,调试是项目构建后的下一步,在成功的汇编/编译/链接过程之后,允许将应用程序可执行文件加载到目标环境进行调试。

CCS 的 Disassembly窗口 ccs界面_Memory

1. 目标配置文件

首先为了使 CCS 正确了解调试环境的物理方面,必须创建目标配置文件。

目标配置文件(Target Configuration Files,后缀为 .ccxml) 负责描述调试环境的物理方面。其中包含调试会话的所有必要信息:调试探针的类型、目标板或设备(甚至多个设备)和(可选)GEL (通用扩展语言)脚本的路径,该脚本负责执行设备和/或硬件初始化。要创建它,只需找出硬件使用的 Debug Probe 型号即可。

CCS 的 Disassembly窗口 ccs界面_寄存器_02


Target Configuration Editor(View → Target Configurations)允许配置调试探针和目标的高级方面,以及为复杂的设备(具有多个内核)和电路板(具有同一扫描链中的多个设备)创建配置。打开Target Configuration之后界面如下所示:

CCS 的 Disassembly窗口 ccs界面_加载_03


可以从该视图轻松管理目标配置,包括重命名/打开/删除配置、将配置设置为默认值、将配置链接到现有项目等。

右键单击上下文菜单包含以下选项:

CCS 的 Disassembly窗口 ccs界面_经验分享_04


对部分选项进行解释:

  • Set as Default.:它将突出显示的目标配置文件设置为工作区的默认配置。
  • Link File to Project:这会将突出显示的目标配置设置为选定项目的活动配置,当项目处于焦点时覆盖任何默认配置。

2. Debug模式下的各界面

2.1. GUI界面

当选择CCS的右上角的CCS Debug时(如下所示)

CCS 的 Disassembly窗口 ccs界面_CCS 的 Disassembly窗口_05


则进入Debug模式,它通常包括如下视图:

CCS 的 Disassembly窗口 ccs界面_CCS 的 Disassembly窗口_06

  • Debug View包括每个内核的目标配置和调用堆栈。
  • Source code view显示程序。
  • 为方便起见,变量、表达式和寄存器视图也默认打开。
  • 如果目标配置需要在加载代码之前运行脚本,则会打开控制台视图(Console view)。

2.2. 调试功能介绍

基本调试功能位于调试视图顶部的栏中:

CCS 的 Disassembly窗口 ccs界面_CCS 的 Disassembly窗口_07


扩展栏显示了除上述基本工具之外的高级调试工具。

  • Open a Terminal:许多嵌入式应用程序包括用于显示消息、发送命令或检查状态的串行连接。为了与这种连接进行交互,需要终端实用程序。
  • CCS 的 Disassembly窗口 ccs界面_寄存器_08

  • 通常将终端配置为串行连接,如下所示:
  • CCS 的 Disassembly窗口 ccs界面_经验分享_09


  • CCS 的 Disassembly窗口 ccs界面_寄存器_10

  • 可以通过点击以下图标打开多个终端。
  • CCS 的 Disassembly窗口 ccs界面_寄存器_11

  • Runtime Object Viewer:为 SYSBIOS 和 TI-RTOS 系统启动运行时对象查看器。
  • Connect/Disconnect:连接或断开与下方调试视图(Debug View)中突出显示的内核的连接。
  • Restore Debug State:从最近断开或终止的内核或设备恢复所有调试设置。恢复的设置包括硬件和软件断点、全局断点、分析状态等。
  • Load:将代码加载到下方调试视图中突出显示的核心。小倒箭头允许选择其他操作重新加载程序、加载符号、添加符号、验证程序和删除所有符号。
  • Real-time modes:启用/禁用内核支持的实时模式。
  • Reset:对内核或设备执行复位。小倒箭头允许在可用的重置中进行选择。
  • Restart:当符号(symbols)或程序加载到目标设备时发出重新启动。重新启动只是将 PC 寄存器重新定位到入口点(通常_c_int00是复位向量)。
  • New Breakpoint:在鼠标光标指向的行添加或切换断点。小的反向箭头允许在可用的断点类型中进行选择。断点是任何调试器中最基本的功能之一,它允许处理器或内核的执行在代码中的预定义位置停止。
  • Debug As:启动一个新的调试会话,终止当前活动的。小反向箭头允许在先前启动的调试会话中进行选择。
  • Assembly Step Into:执行单个汇编指令,跳转到子程序或函数,允许您逐步运行其内部代码。
  • Assembly Step Over:与上面类似,但跳过子程序或函数,立即运行其内部代码。
  • EnergyTrace:启动EnergyTrace会话。

2.3 Debug view(调试视图)

没有加载程序显示为:

CCS 的 Disassembly窗口 ccs界面_CCS 的 Disassembly窗口_12


加载程序之后显示为:

CCS 的 Disassembly窗口 ccs界面_加载_13


它包含几个区域:

  • 显示使用的目标配置文件和使用的调试会话类型的树(Code Composer Studio - Device Debugging是默认类型);
  • 一系列节点,显示链接到目标每个核心的调试探针(Debug Probe),后跟其状态:
    Disconnected or Connected;
    Unknown, Suspended;
    SW Breakpoint, Suspended;
    HW Breakpoint, Running, Free Running are the most common.
  • 程序计数器的当前地址或当前加载的程序的调用堆栈。

2.4 Watching Variables, Expressions, and Registers

  • Variables View:变量视图仅显示属于当前正在执行的函数的局部变量。包含多个元素(如数组、结构或指针)的变量。在表达式名称前以加号 (+) 或减号 (-) 显示 [(+) 符号表示表达式包含可以进一步扩展的元素。 (-) 符号表示表达式已完全展开,可以折叠以减少显示的信息] 。自上次看到后其值发生变化的变量以黄色背景突出显示。只要情况允许,就可以通过单击其值列并输入新值来修改变量的值。
  • CCS 的 Disassembly窗口 ccs界面_加载_14

  • Location中如果变量分配给寄存器,该字段将显示单词 Register 后跟其寄存器名称。在具有单独程序页和数据页的设备中,它 以 @为后缀,后跟页名((Program, Data, IO) 。此视图不允许添加或删除行,因为它由正在调试的程序上下文中存在的变量自动填充。
    工具栏包含几个格式选项,简单的不提及了,下面仅介绍几个:
    Show logical structure:显示大变量(结构、对象等)的逻辑结构类型。此选项对 CCS 调试会话没有影响;
    Open new view:打开一个新视图以允许并排比较值;
    Pin to debug context:在调试具有多个内核的设备时,此选项将视图锁定到上下文中的内核;
    View Menu:带有多个选项的下拉菜单,用于自定义数据在视图中的显示方式。
    ——
    右键单击给定变量会显示以下上下文菜单:
  • CCS 的 Disassembly窗口 ccs界面_加载_15

  • Number Format:将所选变量的数字格式更改为十六进制、十进制、八进制或二进制;
    Cast To Type:将选定变量的数据类型格式更改为任何 C 有效数据类型;
    View Memory:在选定变量的位置打开Memory Browser视图;
    View Memory at Value:与上面类似,但在所选变量指向的位置;
    Q-Values:对于有符号整数,将变量的表示更改为 Q 格式;
    Graph :使用选定行的参数打开图表。不能用于多行;
    Watch:将变量添加到Expressions View。
  • Expressions View:一个典型的监视窗口,可以在其中监视变量(局部、全局、静态)、C 有效表达式甚至寄存器。自上次出现后其值发生变化的表达式以黄色背景突出显示。只要情况允许,就可以通过单击其值列并输入新值来修改表达式的值。
  • CCS 的 Disassembly窗口 ccs界面_寄存器_16

  • Address中与Variables View 中的Location不同的地方在于:
    在具有内存管理单元 (MMU) 的设备中,此变量将默认显示来自 CPU 上下文(CPU Content)的地址。其地址可以通过添加@符号后跟单词 PHY(表示物理)映射到物理地址。
    工具栏包含几个格式选项,同样,简单的不予介绍了:
  • CCS 的 Disassembly窗口 ccs界面_经验分享_17

  • Create a new watch expression:与添加新表达式的功能相同,但会打开一个对话框,以便更轻松地编辑复杂的表达式;
    Open new view:打开一个新视图以允许并排比较值;
    Pin to debug context:在调试具有多个内核的设备时,此选项将视图锁定到上下文中的内核。
  • Registers View:寄存器视图允许查看和编辑器件的内核和外设寄存器的内容,包括位域(指用一个字节中不同的二进制位表示不同的信息)和各个位。已更改的寄存器值以黄色背景突出显示。要更改寄存器或寄存器位字段值,请单击寄存器的值列并进行修改。这仅允许用于非只读寄存器。
  • CCS 的 Disassembly窗口 ccs界面_加载_18

2.5 Disassembly View(反汇编视图)

反汇编视图是调试器的一个组成部分,它将机器语言翻译成汇编语言,因为它显示了调试所需的反汇编指令和符号信息(the disassembled instructions and symbolic information)。此视图默认不打开,但可以通过菜单View → Disassembly编来查看,除非没有加载程序或程序没有附加调试符号。

CCS 的 Disassembly窗口 ccs界面_CCS 的 Disassembly窗口_19

  • Disassembly 视图在其默认配置中包含几个字段:
  • 在视图的左侧显示了程序地址;
  • 如果加载的程序包含符号调试信息并且启用了显示符号选项,则还会显示上下文中源文件的行号;
  • 仍然在视图的左侧位置有个蓝色的小箭头,它表示程序计数器的位置——下一条要执行的指令;
  • 在地址的右侧,操作码以十六进制格式显示,以及反汇编指令。如果操作码引用了一个函数或变量,如果存在调试符号,它们的名称也会显示出来。
  • 另外将鼠标光标悬停在特定函数名称上会显示其名称和地址。
  • 最后行号的右侧显示了实际的 C 源代码。

工具栏包含几个功能,也仅介绍几个。

CCS 的 Disassembly窗口 ccs界面_经验分享_20

  • Address box:此框允许键入地址或符号名称以导航到目录。
  • Show source:允许查看与程序集交织在一起的源代码。
  • Assembly Step Into:执行单个汇编指令,跳转到子程序或函数,允许逐步运行其内部代码。

右键单击主视图会显示以下上下文菜单:

CCS 的 Disassembly窗口 ccs界面_CCS 的 Disassembly窗口_21

  • Show Symbols:在相应地址显示调试符号;
  • Patch Assembly… :允许编辑内存以修改操作码;
  • Disassembly Style… :显示反汇编样式列表并允许在各种类型之间切换,这取决于设备;
  • Run to line:运行到鼠标光标指向的行;
  • Move to line:将 PC 寄存器移动到鼠标光标指向的行;
  • Resume at line:将 PC 寄存器移动到鼠标光标指向的行并从该点开始运行。
    右键单击地址视图会显示以下上下文菜单,仅介绍复杂的几项。
  • Add Dynamid Printf:(仅限 C/C++ Eclipse 调试器)添加一个观察点,当程序计数器到达鼠标光标指向的行时打印出一条消息;
  • Show Addresses:在每个反汇编行的左侧显示内存地址;
  • Show Opcodes:(仅限 C/C++ Eclipse 调试器)显示汇编指令的操作码;
  • Show Function Offsets:显示相对于内存中定义的先前函数符号的偏移量。要求调试符号预先加载到调试器。

2.6 Memory Browser View

调试器的另一个组成部分,它显示了从指定地址开始的目标内存的内容,并具有各种数据格式化功能。内存视图默认不打开,可以通过菜单查看View → Memory Browser。

CCS 的 Disassembly窗口 ccs界面_经验分享_22


它具有多种查看格式和类型:字符、整数(有符号/无符号)、浮点数和多种十六进制数据大小(8 到 64 位)。

其他功能包括:内存填充预定义值、保存到主机 PC 中的文件/从文件中加载、所有变量和函数都可以查看,并且每个内存位置都有一个上下文相关的信息框。

在某些架构中,它还可以显示缓存信息:

CCS 的 Disassembly窗口 ccs界面_Memory_23


要使用它,只需在视图顶部的地址文本框中输入起始地址,然后选择设备的适当内存页。可以通过双击值来编辑所选内存位置的内容。在打开的内存视图中所做的任何属性更改仅适用于该内存视图。工具栏包含几个功能:

CCS 的 Disassembly窗口 ccs界面_CCS 的 Disassembly窗口_24


其中

  • Virtual/Physical Memory View:在虚拟和物理内存内容之间切换。对于 C6600 内核,它绕过 MPAX 以实现完整的 36 位寻址。对于 Cortex A 内核,它绕过了内存管理单元 (MMU);
  • Memory Analysis:它切换缓存内存颜色。取决于设备。

右键单击内存视图会显示以下上下文菜单:

CCS 的 Disassembly窗口 ccs界面_寄存器_25

  • Add Watchpoint (C/C++)… :将观察点添加到突出显示的地址;
  • Find and Replace :搜索和替换目标内存中的数据模式(data patterns);
  • Configure… :配置在视图上显示哪些元素,以及将修改保存到目标内存时的行为;
  • Copy to Memory:将主机中文件的内容加载到目标内存。检查加载和保存内存部分;
  • Load Memory:将主机中文件的内容加载到目标内存。Load Memory对话框如下所示:

    它支持多种数据格式和设置。
  • Save Memory:将目标内存的内容保存到主机中的文件中;
  • Fill Memory:用可配置的数据类型、地址和内存长度填充目标内存的内容。Fill Memory对话框如下所示:
  • Print:将突出显示的地址或整个视图的内容发送到连接到主机的打印机;
  • Reference Buffer:捕获线性缓冲区(引用)并将其保存到内存,以便在代码执行过程中轻松将其与更改进行比较;
  • Tiler Display:将内存内容格式化为 4x4 或 8x2 排列的二维数据帧。对视频处理非常有用。

2.7. Console View(控制台视图)

控制台视图是调试器的另一个组成部分,它显示了调试会话的一些信息性消息。它默认不打开,但通常在调试会话开始时显示各种状态和进度消息。

CCS 的 Disassembly窗口 ccs界面_寄存器_26


它可以显示的几条消息包括:

  • 目标配置脚本(GEL 脚本)的输出;
  • 来自 Debug Probe 或其协议栈的错误和警告;
  • 来自代码中 printf() 语句的任何控制台 I/O 输出(对于多处理器环境,可以将多个控制台视图绑定到每个内核)。

工具栏包含几个功能:

CCS 的 Disassembly窗口 ccs界面_CCS 的 Disassembly窗口_27

  • Clear Console:清除控制台视图的内容;
  • Scroll Lock:添加新内容时锁定自动滚动;
  • Word Wrap:将文本输出的长行换行以适应视图的宽度;
  • Pin Console:在调试具有多个内核的设备时,此选项将视图锁定到上下文中的内核;
  • Display Selected Console:允许选择多种可用的控制台(consoles)类型:构建、CIO 和 GEL 输出是最常见的;
  • Open Console:创建一个新的控制台视图,该视图可用于监控多个内核或多个数据源的输出。

2.8. Memory Allocation

从View>Memory Allocation打开,它以图形表示您的应用程序消耗了多少内存。

2.9. Optimizer Assistant

从View>Optimizer Assistant打开,它是一种静态代码分析工具,可扫描源代码并提供有关如何更改代码以提高性能的建议。任何建议都将显示在Advice视图中。

CCS 的 Disassembly窗口 ccs界面_CCS 的 Disassembly窗口_28

2.10. Stack Usage

为您的应用程序提供堆栈使用的静态视图。该信息在项目构建时生成并显示为函数调用树,其中包含每个函数的堆栈使用情况。

3. Debug Configurations(调试配置)

可以从Run → Debug Configurations打开调试配置,从而调试相关内容进行设置。调试配置包含由以下选项卡分隔的各种设置:

CCS 的 Disassembly窗口 ccs界面_寄存器_29

  • Main:配置调试器的主要选项。在Main界面中有几项选项,下面给予介绍。
    -Target Configuration:指定目标配置文件;
    -Initialization Script:(可选)指向可用于初始化目标、传递参数等的 DSS JavaScript。如果您希望在调试启动期间运行一组自定义步骤,这将非常有用;
    -JTAG entity checkboxes:允许选择在调试器的调试视图中显示哪些 JTAG 元素(内核/CPU、路由器、DAP 等) 。默认情况下,仅选择 CPU;
    -Synchronize the properties for all compatible CPUs and Use the same console for the CIO of all CPUs:这两个选项适用于具有多个内核的目标;
    -Reset Debug Probe Connection S/N:(仅限 XDS110)重置目标配置文件中预配置的序列号参数。这在使用不同的调试探针时很有用。
  • Target界面
  • CCS 的 Disassembly窗口 ccs界面_加载_30

-Program/Memory Load Options:此类别定义与程序/内存加载、验证选项、连接选项、禁用中断和加载期间重置/重启目标相关的设置;
-Auto Run and Launch Options:此类别定义实时选项、自动运行选项和启动选项;
-Misc/Other Options:此类别定义OS Aware 调试选项(在进行 OS Aware 调试时)和其他杂项选项;
-Disassembly Style Options:此类别仅适用于 ARM7、ARM9、Cortex R/A 设备,并设置指令在反汇编视图中显示的模式;
-Flash Settings:此类别定义了几个与闪存相关的设置和操作。

4. Breakpoints(断点)

4.1. 软件断点、硬件断点

断点是任何调试器中最基本的功能之一,它允许处理器或内核的执行在代码中的预定义位置停止。它们显示在源代码编辑器视图的左侧(在垂直编辑器标尺中,连同行号、代码折叠符号等)和断点视图中。只要遇到断点,启用的断点就会导致线程挂起。 启用的断点显示为 蓝色 ,并且一旦调试器成功设置

(软件断点:

CCS 的 Disassembly窗口 ccs界面_经验分享_31


硬件断点:

CCS 的 Disassembly窗口 ccs界面_CCS 的 Disassembly窗口_32



就会覆盖复选标记。禁用的断点不会导致线程挂起,并且在所有视图中显示为 灰色

软件断点 被实现为操作码替换。理论上可以使用的软件断点数量没有限制。

硬件断点 由目标硬件在内部实现。用于执行此操作的方法在很大程度上取决于设备或内核,但通常调试器会将地址写入设备上的寄存器并设置一个标志以启用断点。这些寄存器不会暴露给 IDE。可以在任何内存类型(RAM、Flash 或 ROM)中设置硬件断点,但受限于设备上的寄存器数量。这对于控制台 I/O 设备的类型是强制性的。

要设置断点,只需双击源代码视图中的行号或反汇编视图中的地址的左侧。调试器将检查调试器内存映射以确定指定位置是否可写 (RAM)。如果是这样,将使用软件断点。如果确定该位置不可写(闪存、ROM),则将使用硬件断点。

CCS 的 Disassembly窗口 ccs界面_经验分享_33

4.2. 断点属性

断点属性显示断点的所有详细信息(地址位置、相关源代码、类型)并允许修改相关行为(操作、计数器、事件类型)。如果您已将光标放在断点视图窗口中,则可以右键单击断点并从上下文菜单中选择属性以查看更详细的属性列表。除了简单地停止代码之外,CCS 中的断点还添加了一系列其他操作,例如文件 I/O 传输、屏幕更新等,这些操作可以通过其属性的Action选项进行访问。

CCS 的 Disassembly窗口 ccs界面_Memory_34


其他可配置的断点属性有:

  • Skip Count:设置执行断点操作之前的通过次数;
  • Group:允许对断点进行分组以进行高级控制。

4.3. Watchpoints

观察点是一种特殊类别的硬件断点,可以针对特定的内存读取、内存写入或内存读取或写入两者触发。观察点仅显示在断点视图中。观察点对于捕获异常、无效的内存边界访问、溢出缓冲区等非常有用,并且可以设置为访问任何内存区域,包括内存映射寄存器 (MMR)。要设置观察点,只需在源代码编辑器上突出显示一个变量,右键单击并选择Breakpoint → Hardware Watchpoint。

4.4. Conditional Breakpoints

条件断点是一种特殊类型的断点,仅在指定条件为真时触发。它在断点图标上显示为叠加层。
在断点上设置条件变为条件断点步骤为:

  • a. 在断点视图、反汇编视图或编辑器视图中,右键单击需要修改的断点;
  • b. 从断点的上下文菜单中,选择Breakpoint Properties;
  • c. 选择Debugger Response;
  • d. 在条件字段中,输入要计算的 GEL 表达式。请注意,如果表达式调用 GEL 函数,则必须在已加载的 GEL 文件之一中对其进行定义;
  • e. Apply and Close。

4.5. Breakpoints View

断点视图是调试器的一个组成部分,它允许完全管理断点以及其他扩展,例如观察点、事件计数器等。Breakpoints 视图默认不打开,但可以通过菜单 View → Breakpoints 查看。

CCS 的 Disassembly窗口 ccs界面_CCS 的 Disassembly窗口_35

后记

《CCS11用户界面介绍2》介绍CCS11的中Debug有关内容。
《CCS11用户界面介绍3》将补充一些CCS工具文档链接。