stm32使用Jlink进行GDB脚本调试
1.安装环境
需要安装msys2和gbd,具体可以参考网上怎么安装
2.安装J-link GDB
这个只要安装了J-link,都会有。直接再windows搜索下打开。
正确配置好后会显示等待连接
3.和GDB server连接
将端口号等信息连接,我是直接将J-link GDB的信息都告诉AI了,让AI帮我连接好
4.运行
连接到gdb
开始单步运行
输入n开始单步运行
全速运行
输入c开始全速运行
可以看到我的板子上的2个灯开始闪烁了,成功。让我脱离IDE界面进行代码的调试
1. 启动与连接
# 进入工程目录cd/c/Users/10377/Desktop/Uart/USB_HOST/USB_HOST# 启动 J-Link GDB Server(在另一个 MSYS2/命令行窗口执行)"/d/Program Files/SEGGER/JLink/JLinkGDBServerCL.exe"-deviceSTM32F429IG-ifSWD-speed4000-port2331# 启动 GDB(使用 debug.gdb 自动连接、烧录、停在 main)/c/Users/10377/tools/xpack-arm-none-eabi-gcc-15.2.1-1.1/bin/arm-none-eabi-gdb.exe-xdebug.gdb MDK-ARM/USB_HOST/USB_HOST.axf2. 运行控制
| 命令 | 作用 |
|---|---|
c/continue | 继续运行 |
s/step | 单步进入(会进函数) |
n/next | 单步跳过(不进入函数) |
finish | 运行到当前函数返回 |
u/until | 运行到下一行(适合跳出循环) |
Ctrl + C | 暂停目标 |
monitor reset | 复位目标 |
monitor halt | halt 目标 |
monitor go | 让目标自由运行(慎用,会导致 GDB 失步) |
3. 断点
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. 查看状态
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. 内存与外设查看
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. 反汇编
disassemble main # 反汇编 main 函数 disassemble 0x08002630,+40 # 从指定地址反汇编 40 字节7. 程序下载
load # 用 .axf 加载(本工程会出现 .data 初始化问题,不建议使用) restore MDK-ARM/USB_HOST/USB_HOST.hex # 烧录 Keil 生成的 hex(推荐)8. 常用 GDB 配置
set pagination off # 关闭分页,便于脚本输出 set confirm off # 关闭确认提示 handle SIGTRAP nostop nopass # 忽略 J-Link 产生的 SIGTRAP set logging on # 把 GDB 输出写入日志文件9. 退出
quit # 退出 GDB10. 最简调试流程
- 启动 J-Link GDB Server(端口
2331)。 - 在工程目录下执行:
/c/Users/10377/tools/xpack-arm-none-eabi-gcc-15.2.1-1.1/bin/arm-none-eabi-gdb.exe-xdebug.gdb MDK-ARM/USB_HOST/USB_HOST.axf- 停在
main()后输入:
c # 全速运行,LED 开始闪烁- 需要查看状态时按
Ctrl + C暂停,再用上述命令检查。
