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

如何在GDB中跳过ARM的BKPT指令?(Cortex-M4远程调试)

Cortex-M4 BKPT断点后GDB步进卡死的解决方法

手动修正PC寄存器绕过死循环

当GDB停在bkpt指令处时,先查看当前PC寄存器值:

info registers pc

由于Cortex-M4的bkpt是16位指令,直接将PC加2跳过这条指令:

set $pc = $pc + 2

完成后执行s或n命令即可正常步进,不会陷入bkpt指令的死循环。

改用GDB原生软件断点

移除汇编代码中的手动bkpt指令,改用GDB自带的断点功能:

  • 使用break *<目标指令地址>设置精准断点
  • 若断点位于函数内,直接用break <函数名>即可
    GDB的软件断点会自动处理PC的正确跳转,从根源避免死循环问题,步进操作完全正常。

排查调试代理配置(如OpenOCD)

如果使用OpenOCD作为调试代理,确保配置适配Cortex-M4:

  • 配置文件中明确指定set CHIPNAME cortex-m4
  • 检查reset_config参数是否符合目标板复位逻辑
  • 重启调试代理与目标板,清除可能存在的通信缓存异常

强制恢复目标调试状态

当c命令提示"程序未运行"时,先执行调试代理的复位halt命令:

monitor reset halt

重新将目标置于halt状态后,再重新设置断点或执行步进操作,即可恢复正常调试流程。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:28:17