-
Notifications
You must be signed in to change notification settings - Fork 15
工具链 调试
本文将介绍CLion的远程调试(Remote Debug)配置,实现在CLion内调试程序。
前置阅读资料:工具链 概念介绍
大家可能都习惯了各种 IDE 中的调试工具,知道如何设置断点、Step in/out、查看变量等,但不一定有听说过 GDB 。GDB,是指 the GNU Project debugger,是一个开源的 Linux 平台下常用的 debugger,支持多种语言,IDE能实现的运行、暂停、设置断点、查看变量等,GDB统统都能实现,只是 GDB 是一个命令行工具,不如 IDE 直观易用。
CLion 的调试功能是基于 GDB 的,和 CMake 类似,CLion 相当于 GDB 的 wrapper,向下与 GDB 交互,向上与用户交互。
我们需要使用 ARM 工具链中提供的 arm-none-eabi-gdb 工具,这是专为 ARM 系统设计的 GDB 工具,但用法与普通 GDB 相似。
在本机上编写程序,运行程序、调试程序的设备都是本机。然而,对于一些系统,其通用性或性能达不到本机调试的需求,就比如我们的嵌入式系统,它的性能、IO都非常有限,也不搭载运行 GDB 所需要的环境,这个时候,我们就需要运用远程调试(Remote Debugging)。
在和烧录程序类似,在 PC 上调试 MCU 需要一些中间部件,Adapter 作为 PC 和 MCU 之间的硬件接口,OpenOCD 则负责电脑端与 Adapter 之间的信息交换,同时作为 GDB 的服务端(Server),GDB 与之交互,而 CLion 则作为用户与 GDB 的中间层,如下图所示。
OpenOCD 首先会通过 Adapter 与 MCU 建立链接,同时作为服务端(Server),它与 GDB 之间可通过不同的方式通信,包括管道 Pipe(A)和 TCP 连接(B)。接下来会分别介绍这两种方式,选用一种即可。
在 CLion 2019.1 或以后的版本中,OpenOCD 得到原生支持,直接使用运行按钮旁边的调试按钮即可进入 Remote GDB,不再需要以下复杂的实现方式。以下内容可供有兴趣的同学研究~
当然,如果在 Configuration 内设置了 Download 或者 Reset,开始 Remote GDB 时会自动烧录程序或重置程序(重新开始运行),如果程序卡死,想要确认问题,这是不利的,需要进行相应的配置。
打开 openocd_connect_with_pipe.sh,将其中第12行 cd
后的内容改为工程的绝对路径。需要这一步操作的原因是目前 CLion 的 Remote DBG 运行 arm-none-eabi-gdb 时的 Working Directory 十分诡异,竟然是在 CLion.app 里面,必须使用绝对路径。
- 右上角Target下拉菜单中选择 Edit Configurations
- 添加一个 GDB Remote Debug 配置,命名为 ST-Link DBG Pipe
- GDB 选择 arm-none-eabi-gdb
- 'target remote‘ args 中填入
| sh (工程目录)/openocd_connect_with_pipe.sh
注意,这里也需要用绝对路径。 - Symbol file选择 ‘dev/.build/ch.elf’ PS:.build 目录在 Finder 中是不可见的,可通过 Cmd+Shift+G 手动跳转进去 PPS:需要执行一次编译才有这个文件
- 取消勾选 Show this page 否则,每次点击调试按钮后都会弹出这个选项窗口。
正如之前所说,OpenOCD 相当于一个服务器,我们需要先单独运行它,使其与 MCU 建立链接,然后再通过 TCP 与 GDB 建立链接。在 CLion 中我们可以将其设置为 External Tool。
- CLion - Preference - Tools - External Tools
- 添加一个名为 OpenOCD_Server 的工具,将 Program 选择为
config/openocd_connect.sh
- 右上角Target下拉菜单中选择 Edit Configurations
- 添加一个 GDB Remote Debug 配置,命名为 ST-Link DBG
- GDB 选择 arm-none-eabi-gdb
- 'target remote‘ args 中填入
localhost:3333
- Symbol file 选择 ‘dev/.build/ch.elf’ PS:.build 目录在 Finder 中是不可见的,可通过 Cmd+Shift+G 手动跳转进去 PPS:需要执行一次编译才有这个文件
- 取消勾选 Show this page 否则,每次点击调试按钮后都会弹出这个选项窗口。
- 连接上开发版,上传一次程序 请注意,Remote Debug 不含编译、上传程序,如果代码有更改请先手动上传一次程序!
- 点击调试按钮进入 Remote GDB
- 左上角的 Target 列表选中 ST-Link GDB Pipe,点击调试 如果连接成功,将会有如下信息,同时 ST-Link 上的指示灯会持续闪烁。
如果连接失败,则是这样的:
OpenOCD 的日志文件写入工程目录下的 openocd.log。
- 启动 External Tool Tools - External Tools - OpenOCDServer
如果连接成功,将会有如下信息,同时 ST-Link 上的指示灯会持续闪烁。
此时 OpenOCD 保持运行,等待 GDB 的连接。
如果连接失败,则是这样的:
- 左上角的 Target 列表选中 ST-Link GDB,点击调试
未运行 Remote DBG 之前:
运行 Remote DBG 之后:
断点中间的勾表示断点已被成功设置。程序停在断点处。
这将同时停止 OpenOCD 服务端和 Remote DBG。
- 加入Pipe连接方式 2018.8.2 liuzikai
- 小更新 2019.1.11 liuzikai
- 增加适用于 CLion 2019.1 或以后版本的使用说明。liuzikai
- 基础知识
- 基础配置
- 进阶与参考