You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用VSCode GDB调试STM32时复位处理程序出现异常

STM32 VSCode GDB调试向量表重定位问题解决方案
  • 必须告知GDB向量表重定位地址,STM32CubeIDE是自动完成该配置的,VSCode中需要手动设置:
    • 在GDB启动时执行命令设置VTOR寄存器:set $VTOR = 0x8008200。VTOR是STM32控制向量表基地址的寄存器,硬件默认指向0x08000000,重定位后不手动设置的话,异常触发时会读取错误的向量地址,直接导致崩溃。
  • 配置VSCode的launch.json实现自动设置:
    • 可以在miDebuggerArgs里添加该命令,示例:
      "miDebuggerArgs": "-ex \"set $VTOR = 0x8008200\""
      
    • 或者创建GDB初始化脚本(比如gdb_init.gdb),写入set $VTOR = 0x8008200,然后在launch.json里通过miDebuggerPath后的-x gdb_init.gdb加载脚本。
  • 检查固件的Reset_Handler代码:
    • 如果你的固件在启动时没有自行设置VTOR寄存器(比如在Reset_Handler开头添加LDR R0, =0xE000ED08、LDR R1, =0x8008200、STR R1, [R0]这类指令),那么调试时必须由GDB提前设置,否则硬件还是会使用默认向量表地址。
  • 确认PC的Thumb模式正确性:
    • Thumb指令模式下PC的最低位必须为1,所以启动时PC应设置为0x8012031而非0x8012030。如果调试配置里错误设置了不带最低位的PC地址,会导致CPU进入ARM模式执行Thumb指令,直接触发崩溃。可以在GDB里用info registers pc检查当前PC值是否正确。
  • 验证链接脚本的向量表定义:
    • 确保链接脚本里__vector_table或__Vectors的起始地址被正确设置为0x8008200,通过GDB命令print &__vector_table可以查看该符号的地址是否符合预期,避免链接时向量表地址未正确重定位。

内容的提问来源于stack exchange,提问作者zetanaught

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 07:04:54