1

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

显然,GDB 原生实现很慢。可能需要此数据包来重新定义实现。例如,当我将 wp 设置为 addr 而不是 value 时,Z2 数据包真的被发送了。但我不明白 GDB 应该如何理解“S05”(停止数据包)是由于观察点而发送的。

在断点中,决定是在当前bp_address和程序计数器值之间进行比较。

它如何与观察点一起工作?

4

1 回答 1

0

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

收到的数据包:T05watch:000000000058c460;06:00deffffff7f0000;07:f0ddffffff7f0000;10:9cd4410000000000;thread:p3425.3425;core:5;

于 2014-04-17T08:34:19.417 回答