ESP32-S3 CMSIS-DAP与 IAR 调试记录,解决问题 :The IP address is not valid or unknown hostname

GD32F527VS:ESP32-S3 CMSIS-DAP、pyOCD、GDB Server 与 IAR 调试记录

本文记录一个已经验证可用的 GD32F527VS SWD 调试方案:使用 ESP32-S3 运行本项目的 CMSIS-DAP 固件,通过 pyOCD 提供 GDB Server,并可供 GNU GDB 或 IAR C-SPY 的 GDB Server driver 连接。

解决报错:
Mon Jul 13, 2026 09:10:23: Fatal error: The IP address is not valid or unknown hostname: localhost:3333 Session
aborted!

已验证的调试链路

IAR 或 arm-none-eabi-gdb
        |
        | TCP / GDB Remote Protocol
        v
pyOCD GDB Server(127.0.0.1:3333)
        |
        | USB CMSIS-DAP v2 Bulk
        v
ESP32-S3 CMSIS-DAP Probe
        |
        | SWD
        v
GD32F527VS

已验证的硬件接线

ESP32-S3 GPIO17 -> GD32 SWCLK
ESP32-S3 GPIO18 -> GD32 SWDIO
ESP32-S3 GND    -> GD32 GND
GD32 VDD        -> 3.3V

当前已验证的 pyOCD 工作流不依赖 NRST。

前置条件

  • ESP32-S3 已烧录使用普通 GPIO SWD bitbang 的稳定 CMSIS-DAP 固件。
  • 已安装 pyOCD。
  • 已安装 GD32F527 Device Family Pack。
  • 目标工程已构建,且存在带调试符号的 ELF 文件。

先确认 pyOCD 能识别 ESP32-S3 probe:

pyocd list

示例输出:

Espressif Systems Co. Ltd. CMSIS-DAP   30EDA033A060

CMSIS-DAP 的 UID 来自 ESP32-S3 MAC 地址,因此不同开发板的 UID 会不同。后续命令中的 30EDA033A060 应替换为 pyocd list 显示的实际 UID。

启动 pyOCD GDB Server

在独立 PowerShell 窗口中运行以下命令,并在整个调试期间保持该窗口运行:

pyocd gdbserver `
  -t GD32F527VS `
  --pack "C:\Users\11349\Downloads\GD32F527_AddOn_V1.3.0\GD32F527_AddOn_V1.3.0\GD32F527_AddOn_V1.3.0\GD32F527_AddOn_V1.3.0\GigaDevice.GD32F527_DFP.1.3.0.pack" `
  -u 30EDA033A060 `
  --frequency 1000000 `
  --port 3333

GDB Server 默认监听本机 TCP 3333 端口。

GNU GDB 调试流程

当前 RT-Thread 工程中,已验证可用于调试的 ELF 文件为:

D:\code\pi_gd32\rt-thread\bsp\gd32\arm\gd32527v-start\build\Exe\rtthread.out

该文件是带 DWARF 调试信息的 ARM ELF:

ELF 32-bit ARM
with debug_info
not stripped

不要使用下列路径,因为当前构建目录中不存在该文件:

...\build\Exe\project.elf

启动 GDB:

cd "D:\backup\GD32EmbeddedBuilder_v1.5.6_Rel\GD32EmbeddedBuilder_v1.5.6_Rel\Tools\GNU Tools ARM Embedded\xpack-arm-none-eabi-gcc\9.2.1-1.1\bin"
.\arm-none-eabi-gdb.exe "D:\code\pi_gd32\rt-thread\bsp\gd32\arm\gd32527v-start\build\Exe\rtthread.out"

进入 GDB 后执行:

target extended-remote localhost:3333
monitor reset halt
break main
continue

已验证可以命中:

Breakpoint 1, main () at ...\applications\main.c:22

常用 GDB 命令:

next
step
continue
backtrace
info registers
info threads
thread apply all backtrace
print variable_name
monitor reset halt

如果目标程序已经由 pyOCD 烧录,不需要在 GDB 中执行 load。正常流程为:复位、停住、设断点、继续运行。

monitor reset halt
break main
continue

使用 pyOCD 烧录 GD32F527VS

当前可靠的烧录路径是 pyOCD:

pyocd flash `
  -t GD32F527VS `
  --pack "C:\Users\11349\Downloads\GD32F527_AddOn_V1.3.0\GD32F527_AddOn_V1.3.0\GD32F527_AddOn_V1.3.0\GD32F527_AddOn_V1.3.0\GigaDevice.GD32F527_DFP.1.3.0.pack" `
  "D:\code\pi_gd32\rt-thread\bsp\gd32\arm\gd32527v-start\build\Exe\project.hex" `
  -u 30EDA033A060 `
  --frequency 1000000

IAR C-SPY 通过 pyOCD GDB Server 调试

IAR Embedded Workbench 可以通过 GDB Server C-SPY driver 连接 pyOCD。

  1. 先按前文启动 pyOCD GDB Server。
  2. 在 IAR 中打开:Project -> Options -> Debugger -> Setup
  3. Driver 下拉框选择:GDB Server
  4. 在 GDB Server 通信设置中填写:
127.0.0.1,3333

这里必须使用英文逗号分隔 IP 地址和端口:

<IP 地址>,<端口>

已验证可用:

127.0.0.1,3333

以下格式在 IAR GDB Server driver 中无效:

localhost:3333
127.0.0.1:3333

它们会导致类似错误:

Fatal error: The IP address is not valid or unknown hostname

IAR 与 pyOCD 的职责划分

通过 GDB Server 使用 IAR 时,建议按以下方式分工:

pyOCD:CMSIS-DAP、SWD、复位/暂停、Flash 烧录、GDB Server
IAR:源码显示、符号、断点、单步、变量、调用栈、寄存器

优先使用 pyOCD 进行烧录,再在 IAR 中 attach/debug。

IAR 的原生 Flash Loader 与 pyOCD GDB Server 并不保证完全兼容。如果出现:

Failed to load flash loader: ...\FlashGD32F527xS.flash

这属于 IAR Flash Loader 工作流的兼容性问题,不代表 ESP32-S3 CMSIS-DAP、SWD 或 GDB Server 连接失败。

建议先使用 pyOCD 完成下载,再使用 IAR 的 attach/debug 调试方式,避免依赖 IAR Flash Loader。

常见问题

GDB 报 Connection refused

pyOCD GDB Server 未启动、已退出,或者使用了不同端口。应先启动 pyOCD GDB Server,并保持其窗口运行。

GDB 报 No executable file specifiedNo symbol table is loaded

通常是 GDB 使用了不存在的 ELF 路径。对于当前 RT-Thread 工程,应使用:

...\build\Exe\rtthread.out

而不是不存在的 project.elf

ESP32-S3 串口显示 DOWNLOAD(USB/UART0)

示例:

boot:0x0 (DOWNLOAD(USB/UART0))
waiting for download

ESP32-S3 已进入 ROM 下载模式。常见原因是 USB-to-UART 的 DTR/RTS 控制线被终端工具拉动。重新使用 esptool 烧录桥接固件,并正常复位即可恢复。

IAR 直接选择 CMSIS-DAP 后显示 Probe not found

当前稳定固件暴露的是 CMSIS-DAP v2 Bulk transport,pyOCD 可以直接使用。IAR 的直接 CMSIS-DAP driver 更依赖 HID transport,尚未作为正式功能完成验证。

当前推荐的 IAR 接入方式是:

IAR GDB Server driver -> pyOCD GDB Server -> ESP32-S3 CMSIS-DAP
posted @ 2026-07-13 09:35  口嗨养生博  阅读(12)  评论(0)    收藏  举报