我正在使用 gdb 通过自制的 gdb 服务器与基于 LEON2 的 ASIC 进行通信(不确定“gdb 服务器”是否是正确的短语)。它的工作原理是这样的:gdb 客户端使用普通的 gdb 协议与 gdb 服务器通信,然后 gdb 服务器将 gdb 请求转换为从/向硬件读取和写入,并将结果发送回客户端(如果有)。我的 gdb 客户端是 Windows 7 PC 上 RTEMS 4.8.0 中的 sparc-rtems-gdb 6.6。
当我启动 gdb 客户端时,我运行以下命令来附加到 gdb 服务器:
target extended-remote localhost:5000
然后我想改变 RAM 中的一个单词,所以我运行这个 gdb 命令:
set *((unsigned int*) 0x40000000)=2
在调试 gdb 服务器时,我可以看到它收到以下行,根据 gdb 协议,这是预期的并且是正确的,即将 4 个字节,值 2 写入地址 0x40000000:
M40000000,4:00000002
现在的困惑:在上面的写请求之后,另一个请求来自gdb客户端,从地址0xABD37787读取4个字节:
mabd37787,4
为什么 gdb 客户端试图从该地址读取?据我所知,我没有做任何事情来请求这个读取,我只想执行写入。如果 gdb 会读回地址 0x40000000,例如为了验证写入,就可以了。但是我的硬件上不存在无处不在的地址 0xABD37787,这给我带来了问题。
有什么方法可以调试 gdb 客户端以确定它正在发送和接收什么(以及为什么)?或者 gdb 中是否有可以解释这种行为的设置?
此致
亨里克