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

如何在ARM架构的GDB中跳过BKPT指令?

解决GDB中跳过BKPT指令的方法

当你用__asm__ __volatile__ ("bkpt #0");触发SIGTRAP导致GDB反复暂停时,continue和skip不管用是因为每次执行到该指令都会重新触发陷阱,试试下面几个实用方法:

  • 临时手动跳过(单次生效)
    当GDB停在BKPT指令时,先确认当前架构下BKPT指令的长度(比如ARM32的BKPT是2字节,ARM64是4字节),然后直接修改程序计数器(PC)跳过该指令:

    set $pc = $pc + 2  # ARM32用这个,ARM64换成+4
    continue
    

    执行后程序就会跳过BKPT继续运行。

  • 自动跳过该位置的所有BKPT(永久生效直到重启GDB)
    先找到BKPT指令的内存地址(可以用info line或者反汇编查看对应地址),然后给这个地址设置断点并绑定自动执行的命令:

    break *0xXXXXXX  # 替换成你的BKPT指令实际地址
    commands
      set $pc += 2  # 根据架构调整偏移量
      continue
    end
    

    之后每次运行到该BKPT时,GDB会自动修改PC并继续执行,不会再暂停。

  • 全局忽略SIGTRAP信号(慎用)
    如果你的调试场景不需要依赖SIGTRAP的其他断点(比如普通软件断点),可以直接让GDB忽略SIGTRAP的暂停:

    handle SIGTRAP nostop
    

    这个方法会让所有SIGTRAP触发时都不暂停,适合不需要其他调试断点的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 02:01:26