Eclipse + GDB + J-Link 的调试实践
本文介绍如何创建Eclipse的调试配置,如何控制调试过程,如何查看修改各种变量。
对 Eclipse 的要求
- 所用 Eclipse 应当安装了 Eclipse Embedded CDT 插件。
- 从 https://www.eclipse.org/downloads/packages/ 下载 Eclipse IDE for Embedded C/C++ Developers ,此版本已经包含所需插件。
配置 J-Link 路径
- 通过菜单 Window>>Preferences 打开全局配置对话框,选择 MCU>>Global SEGGER J-Link Path ,在相应输入框填入 GDBServer 可执行文件名和所在路径。
创建调试配置
- 通过菜单 Run >> Debug configurations… 打开调试配置对话框。
- 左侧列表中选中 GDB SEGGER J-Link Debugging ,点击左上角 New launch configuration 按钮,新建一个调试配置。
调试配置 Main 标签页
- 确认 Project 名是否正确,若不正确或为空,那么点击右侧 Browse… 按钮选择正确的工程。
- 确认 C/C++ Application 是否为待调试程序,若不正确或为空,点击右侧 Search Project… 或 Browse…按钮选择待调试程序。
调试配置 Debugger 标签页
- Device name 输入框输入 MCU 型号。
- 所支持的 MCU 型号可以通过 SEGGER J-Link GDB Server 的 Target Device Settings 对话框查看。
调试配置 Startup 标签页
- 去除 Enable flash breakpoints 选项。
- 去除 Enable semihosting 选项。
- 填入 CPU 时钟。
调试配置 SVD Path 标签页
- 若调试驱动程序,需要查看外设寄存器,那么需要指定 SVD file 。
- 只调试应用层代码,可以忽略。
开始调试
- 配置完成后,点击配置对话框右下角Debug 按钮即可开始调试。
- 调试配置将保存在 workspace 中,下次需要再次调试时,可以点击菜单Run>>Debug history 中的对应项开始调试,也可以通过工具栏按钮开始调试,见下图。点击调试按钮开始与最近的调试一样的调试,点击调试按钮右侧三角型按钮弹出菜单,可以选择所需的调试配置或菜单。
调试控制
-
开始调试后, Eclipse 将进入调试窗口布局。
-
Eclipse 工具栏将显示调试控制工具,如下图。
-
Resume ,连续执行,直到碰到断点或点击暂停按钮。即 Run 操作。
-
Suspend ,暂停,连续执行状态下,点击暂停按钮,将在当前位置停止执行。即 Halt 操作。
-
Terminate ,结束本次调试。即 Stop 操作。
-
Step Into ,单步执行,碰到函数调用语句则进入函数。
-
Step Over ,单步执行,若当前语句为函数调用,则函数调用作为单条语句执行,不进入函数。
-
Step Return ,执行完当前函数的剩余代码,返回调用处暂停。
-
指令单步模式,点击该按钮切换指令单步和语句单步。进入指令单步后,将自动打开反汇编窗口,再点击 StepInto 或 Step Over 按钮时仅执行一条指令。
-
Restart ,复位MCU ,程序从头重新开始执行。
添加断点
- 在编辑器视图的行号左侧双击,或点击右键弹出菜单选择 Toggle breakpoint 。
- 在 Breakpoints 视图,点击右侧三个点弹出菜单选择 Add xxx Breakpoint 菜单,有多种类型的断点,包括Watchpoint 。
查看函数调用栈
- 通过 Debug 视图查看当前调用栈。下方函数调用上方函数。形成一个调用链。
- Debug 视图可以配合Variables 视图查看每个函数的局部变量,点击选择Debug 视图中不同的函数, Variables 视图将显示与选中函数相应的局部变量。
查看修改局部变量
- 通过 Variables 视图查看函数局部变量。
- 当 CPU 进入 Halt 时, Variables视图默认显示函数调用栈顶部函数的局部变量,通过 Debug 视图选择调用栈内的其它函数时, Variables 将显示对应函数的局部变量。
- 如有必要,可以在 Value 列修改全局变量。
查看修改全局变量
- Expressions 视图查看全局变量。
- 添加变量到 Expressions 视图的方法:
- 点击 Expressions 视图右侧的加号,在对话框内填入合法的 C 表达式。
- 调试模式下,双击选中要查看的全局变量,点击右键菜单,选择 Add Watch Expression 。
- 点击 Expressions 视图的表示式列表的最
- 如有必要,可以在 Value 列修改全局变量。
查看反汇编
- 点击工具栏的指令单步或通过菜单 Window>>Show View>>Disassembly 打开 Disassembly 视图。
查看 CPU 寄存器
- Registers 视图查看 CPU 寄存器。
- 一般情况下,寄存器视图配合指令单步和反汇编视图使用。
- 如果有需要,可以修改寄存器的值。
查看修改外设寄存器
- Peripherals 视图配合 Memory 视图查看修改外设寄存器。
- Peripherals 视图中勾选要查看的外设。
- Memory 视图显示外设寄存器,包括寄存器内的位定义。如有必要,可以修改寄存器值。