我正在为 ARM 编写 gdbstub,我有一个问题。我正在尝试为我的存根实现观察点。GDB 为不同类型的观察点(读、写、访问)提供了特殊的数据包,但是每次我在某些值上设置观察点时,我都会得到 GDB 实现——单步执行代码并比较每一步的值。它在 GDB 文档中指定,但是为什么需要一个特殊的数据包来编写观察点呢?
显然,GDB 原生实现很慢。可能需要此数据包来重新定义实现。例如,当我将 wp 设置为 addr 而不是 value 时,Z2 数据包真的被发送了。但我不明白 GDB 应该如何理解“S05”(停止数据包)是由于观察点而发送的。
在断点中,决定是在当前bp_address
和程序计数器值之间进行比较。
它如何与观察点一起工作?