stm32使用Jlink进行GDB脚本调试

1.安装环境

需要安装msys2和gbd,具体可以参考网上怎么安装

这个只要安装了J-link,都会有。直接再windows搜索下打开。

正确配置好后会显示等待连接

3.和GDB server连接

将端口号等信息连接,我是直接将J-link GDB的信息都告诉AI了,让AI帮我连接好

4.运行

连接到gdb

开始单步运行

输入n开始单步运行

全速运行

输入c开始全速运行

可以看到我的板子上的2个灯开始闪烁了,成功。让我脱离IDE界面进行代码的调试

1. 启动与连接

bash 复制代码
# 进入工程目录
cd /c/Users/10377/Desktop/Uart/USB_HOST/USB_HOST

# 启动 J-Link GDB Server(在另一个 MSYS2/命令行窗口执行)
"/d/Program Files/SEGGER/JLink/JLinkGDBServerCL.exe" -device STM32F429IG -if SWD -speed 4000 -port 2331

# 启动 GDB(使用 debug.gdb 自动连接、烧录、停在 main)
/c/Users/10377/tools/xpack-arm-none-eabi-gcc-15.2.1-1.1/bin/arm-none-eabi-gdb.exe -x debug.gdb MDK-ARM/USB_HOST/USB_HOST.axf

2. 运行控制

命令 作用
c / continue 继续运行
s / step 单步进入(会进函数)
n / next 单步跳过(不进入函数)
finish 运行到当前函数返回
u / until 运行到下一行(适合跳出循环)
Ctrl + C 暂停目标
monitor reset 复位目标
monitor halt halt 目标
monitor go 让目标自由运行(慎用,会导致 GDB 失步)

3. 断点

gdb 复制代码
break main                 # 在 main 函数入口打断点
break main.c:241           # 在 main.c 第 241 行打断点
break TIM6_DAC_IRQHandler  # 在中断服务函数打断点
info breakpoints           # 列出所有断点
delete 1                   # 删除编号为 1 的断点
delete breakpoints         # 删除所有断点
disable 1                  # 禁用断点
enable 1                   # 启用断点

4. 查看状态

gdb 复制代码
info registers             # 查看所有寄存器
info registers pc          # 只看 PC
print x                    # 打印变量 x 的值
print/x x                  # 十六进制显示
print/d x                  # 十进制显示
print &x                   # 打印变量地址
info locals                # 查看当前栈帧局部变量
info args                  # 查看当前函数参数
backtrace                  # 查看调用栈(可简写 bt)
frame 2                    # 切换到第 2 号栈帧

5. 内存与外设查看

gdb 复制代码
x/10wx 0x20000000          # 从 RAM 起始地址查看 10 个字(32 位十六进制)
x/16bx 0x08000000          # 查看 Flash 前 16 字节
x/4wx 0xE000E010           # 查看 SysTick 寄存器(CTRL / LOAD / VAL / CALIB)
x/1wx 0x40020414           # 查看 GPIOB_ODR(LED 输出状态)

6. 反汇编

gdb 复制代码
disassemble main           # 反汇编 main 函数
disassemble 0x08002630,+40 # 从指定地址反汇编 40 字节

7. 程序下载

gdb 复制代码
load                       # 用 .axf 加载(本工程会出现 .data 初始化问题,不建议使用)
restore MDK-ARM/USB_HOST/USB_HOST.hex   # 烧录 Keil 生成的 hex(推荐)

8. 常用 GDB 配置

gdb 复制代码
set pagination off         # 关闭分页,便于脚本输出
set confirm off            # 关闭确认提示
handle SIGTRAP nostop nopass  # 忽略 J-Link 产生的 SIGTRAP
set logging on             # 把 GDB 输出写入日志文件

9. 退出

gdb 复制代码
quit                       # 退出 GDB

10. 最简调试流程

  1. 启动 J-Link GDB Server(端口 2331)。
  2. 在工程目录下执行:
bash 复制代码
/c/Users/10377/tools/xpack-arm-none-eabi-gcc-15.2.1-1.1/bin/arm-none-eabi-gdb.exe -x debug.gdb MDK-ARM/USB_HOST/USB_HOST.axf
  1. 停在 main() 后输入:
gdb 复制代码
c                          # 全速运行,LED 开始闪烁
  1. 需要查看状态时按 Ctrl + C 暂停,再用上述命令检查。
相关推荐
LCG米3 小时前
STM32硬件CRC外设实测:多项式固定陷阱、CRC-32校验不匹配根因与软件查表法耗时对比落地
stm32·单片机·嵌入式硬件
La Pulga7 小时前
【FreeRTOS源码学习笔记】任务切换
单片机·mcu·学习·嵌入式·freertos·实时操作系统
女神下凡10 小时前
芯参谋(85):Linux_PPI_NAND_驱动开发指南
linux·运维·arm开发·驱动开发·单片机·嵌入式硬件·设计规范
Zw-awa11 小时前
从 CH340 到 HC-05 和 HC-06:让小车脱离电脑
stm32
硅基手札12 小时前
【Linux 内核专栏 19】20 · 嵌入式子系统 — GPIO·pinctrl·clock·regulator
linux·运维·单片机·linux内核·嵌入式开发·调试定位
何粥学14 小时前
Vivado 2024.2 开发记录(AC820 Zynq-7020)——软件使用,点亮led灯
单片机·嵌入式硬件·zynq
Sakura_j_h_15 小时前
51 单片机驱动四位数码管:动态扫描、限流电阻与消影的取舍
单片机·嵌入式硬件·51单片机·嵌入式·数码管·动态扫描·限流电阻
HANDY0920016 小时前
从“不照人”到“剂量达标”:扇叶遮挡式UV-C空气消毒的工程边界与可验证评估框架
开发语言·人工智能·嵌入式硬件·智能家居
飞凌嵌入式19 小时前
千次静电放电试炼,守住飞凌嵌入式硬件可靠底线
嵌入式硬件
蹊黎1 天前
Linux 下用 C 语言实现进度条
linux·c语言·单片机