问题原因已经找到,就是qemu网络延时导致。从log信息中看到当发完第三个qSupported packet,Ack才回来。 其实这个Ack是响应第一个qSupported packet。 我从gdbserver这边的log信息看,他是很快sent Ack done通过一个写write系统调用。中间的花费大概6s时间在网络传输中。我暂时的解决办法是把gdb 中remote_timeout从2s改到6s,这个就工作了,谢谢大家在帮忙。 On Wed, Dec 12, 2012 at 11:02 AM, Li Bingqiu <lbingqiu@xxxxxxxxx> wrote: > 谢谢你的建议,暂时还不能更换,更高的版本需要porting。我自己去看下代码,如果解决了,我会把解决办法发出来 > > > On Wed, Dec 12, 2012 at 10:26 AM, Yao Qi <qiyaoltc@xxxxxxxxx> wrote: > >> 第一次失败的: >> >> >> On 12/12/2012 09:47 AM, Li Bingqiu wrote: >> >>> (gdb) target remote :1234 >>> Remote debugging using :1234 >>> Sending packet: $qSupported#37...Sending packet: >>> $qSupported#37...Sending packet: $qSupported#37...Ack >>> >> >> 这里不对。 gdb 莫名其妙的连续发出了三个qSupported packet,一般情况 下,GDB在target remote >> 的时候,只用发出一个qSupported packet,参见你第二 次成功的output。 >> >> >> Packet received: >>> PacketSize=7cf;QPassSignals+;**qXfer:libraries:read+;qXfer:** >>> auxv:read+;qXfer:features:**read+ >>> Packet qSupported (supported-packets) is supported >>> Sending packet: $qXfer:features:read:target.**xml:0,7ca#46...Ack >>> Packet received: >>> PacketSize=7cf;QPassSignals+;**qXfer:libraries:read+;qXfer:** >>> auxv:read+;qXfer:features:**read+ >>> Unknown remote qXfer reply: >>> PacketSize=7cf;QPassSignals+;**qXfer:libraries:read+;qXfer:** >>> auxv:read+;qXfer:features:**read+ >>> >> >> 前边的三个qSupported packet,导致后边的packet都乱了,所以这里报错了。 >> >> 如果你们可以更换gdb,那就更新到最新的gdb (6.8有点太旧了),如果还有问 题,去sourcware bugzilla >> 开bug,到时候会有人去fix。 不过你们不能更换 gdb,那就自己fix吧。看看 remote.c:remote_query_**supported >> 的代码。 Good luck! >> >> >