在 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

./_images/DebuggingWithGDB_PixhawkBlackMagicProbe.jpg

BlackMagic 探头应使用随附的灰色 10 线电缆连接到 Pixhawk 的 JTAG 连接器。请注意,大多数 Pixhawk 的 JTAG 连接器上都没有焊接针座,因为这会干扰外壳。

安装 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 中的 箱柜 以上目录。

./_images/openocd.png

注意:eBay 上有两个版本的 ST-link 调试器,如果命令不起作用,请将第一行改为 消息来源 [查找 接口/stlink-v2-1.cfg].

启动 GDB 并运行一些命令

复制 .gdbinit./build/<boardname>/bin 和编辑 ~/.gdbinit 将有以下文字 设置 自动加载 安全路径 /如果以前没有这样做的话。

在另一个窗口中,键入 arm-none-eabi-gdb 自动飞行器./build/<boardname>/bin 文件夹。现在您已连接到 gdb 调试会话,可以使用下一节的命令。

./_images/DebuggingWithGDB-startGBD.png

一些有用的命令

r - 重启进程

b 函数名 - 即 b setup - 在 "setup "函数开始处设置断点。请注意,可以在类名前添加一个名称,例如 b AC_AttitudeControl::init

Ctrl-C - 停止代码执行,以便设置断点等

继续 - 从停止的地方继续执行代码

展览 断线 - 显示执行停止的地址(见下文)

信息 线条 * 地址 - 显示给定地址的 c++ 行(即来自 show interrupted-thread)

信息 线程 - 显示所有线程的状态

拆卸 地址 - 将给定地址转换为汇编代码

出口 - 退出 GDB

../_images/GDB_commands2.jpg