GDB监视点实现

GDB监视点实现,gdb,gdbserver,watchpoint,Gdb,Gdbserver,Watchpoint,我正在为ARM编写gdbstub,我有一个问题。我正在尝试为我的存根实现监视点。GDB为不同类型的观察点读、写、访问提供了特殊的数据包,但每次我在某些值上设置观察点时,我都得到了GDB实现——单步执行代码并比较每一步的值。它是在GDB文档中指定的,但是为什么您需要一个特殊的包来写入监视点呢 显然,GDB本机实现很慢。可能需要此数据包来重新定义实现。例如,当我将wp设置为addr而不是value时,Z2数据包实际上被发送了。但我不明白GDB应该如何理解S05stop数据包是因为一个观察点而发送的

我正在为ARM编写gdbstub,我有一个问题。我正在尝试为我的存根实现监视点。GDB为不同类型的观察点读、写、访问提供了特殊的数据包,但每次我在某些值上设置观察点时,我都得到了GDB实现——单步执行代码并比较每一步的值。它是在GDB文档中指定的,但是为什么您需要一个特殊的包来写入监视点呢

显然,GDB本机实现很慢。可能需要此数据包来重新定义实现。例如,当我将wp设置为addr而不是value时,Z2数据包实际上被发送了。但我不明白GDB应该如何理解S05stop数据包是因为一个观察点而发送的

在断点中,根据当前bp_地址和程序计数器值之间的比较作出决定


它是如何与监视点一起工作的?

当我在x86-64 linux机器上尝试使用gdbserver+gdb时,gdbserver用T数据包回复,其中它将监视作为停止原因:

收到的数据包:T05watch:0000000000 58C460;06:00deffffff7f0000;07:F0DDFFFF7F0000;10:9CD44100000000;螺纹:p3425.3425;核心:5