在 STM32 上使用 GDB 调试¶
本页介绍如何在 Linux 上设置 GDB 以调试 STM32 上的问题。具体命令在 Ubuntu 18.10 上进行了测试。
导言¶
GDB(GNU 调试器)"允许您查看另一个程序执行时的 "内部 "情况,或另一个程序崩溃时的情况",这在使用 STM32 调查非常底层的故障时非常有用(不能用于 APM1/APM2)
本指南假定您已按照以下说明在机器上成功构建了固件 Windows操作系统, 苹果电脑 或 Linux操作系统.
A 黑魔法探头 或 ST-Link V2 JST 调试器 还需要BlackMagic 探头可在美国从以下网站购买 过渡机器人, 1 位平方 或在新西兰从 绿色舞台.
一个小插头 (FTSH-105-04-L-DV) 可能需要焊接到飞行控制器的 JTAG 端口上。
编译固件¶
构建并上传固件的调试变体:
`
./waf 配置 --板=Pixhawk1-1M --调试 --启用--断言
./waf --target=examples/UART_test --上传
`
将 BlackMagic 探头连接到 Pixhawk¶
BlackMagic 探头应使用随附的灰色 10 线电缆连接到 Pixhawk 的 JTAG 连接器。请注意,大多数 Pixhawk 的 JTAG 连接器上都没有焊接针座,因为这会干扰外壳。
将 ST-Link V2 JTAG 调试器连接到 STM32¶
应使用 JTAG 分线将 ST-Link 调试器连接到 STM32 的 JTAG 连接器。连接 SWDIO 和 SWCLK(参见 调试端口引脚 供参考)连接到 ST-Link 调试器上相应的 SWDIO 和 SWCLK 引脚。
确保 BRD_OPTIONS 如果使用的载具软件中存在位 3,则设置 "启用调试引脚 "位。此外,还建议通过确保不设置第 0 位来禁用看门狗。
安装 GDB¶
如果使用 Ubuntu,您的计算机上可能已经安装了 GDB,而且它也可以正常工作,不过我们建议您使用在此处下载的版本 https://firmware.ardupilot.org/Tools/STM32-tools
gcc-arm-none-eabi*-linux.tar.bz2 文件包含推荐的编译器和推荐的 gdb 版本。
如果要使用 ST-Link 调试器,请安装 gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2 文件中的 gdb 版本。
安装后,你会发现有一个名为 arm-none-eabi-gdb 的工具。
安装 OpenOCD¶
如果使用 ST-Link 调试器,则需要安装 OpenOCD:
苏都 apt-get 安装 openocd
.
在运行 OpenOCD 和 GDB 之前,需要将它们的配置文件复制到构建文件夹。请注意,构建文件夹的名称与电路板名称相同。
前往 ./Tools/debug
文件夹并复制 openocd.cfg
至 ./build/<boardname>/bin
如果以前没有这样做
类型 openocd
中的 箱柜
以上目录。
注意:eBay 上有两个版本的 ST-link 调试器,如果命令不起作用,请将第一行改为 消息来源 [查找 接口/stlink-v2-1.cfg]
.
启动 GDB 并运行一些命令¶
复制 .gdbinit
至 ./build/<boardname>/bin
和编辑 ~/.gdbinit
将有以下文字 设置 自动加载 安全路径 /
如果以前没有这样做的话。
在另一个窗口中,键入 arm-none-eabi-gdb 自动飞行器
在
./build/<boardname>/bin
文件夹。现在您已连接到 gdb 调试会话,可以使用下一节的命令。
一些有用的命令
r
- 重启进程
b 函数名
- 即 b setup - 在 "setup "函数开始处设置断点。请注意,可以在类名前添加一个名称,例如
b AC_AttitudeControl::init
Ctrl-C
- 停止代码执行,以便设置断点等
继续
- 从停止的地方继续执行代码
展览 断线
- 显示执行停止的地址(见下文)
信息 线条 * 地址
- 显示给定地址的 c++ 行(即来自 show interrupted-thread)
信息 线程
- 显示所有线程的状态
拆卸 地址
- 将给定地址转换为汇编代码
出口
- 退出 GDB