发送" +"的GDB服务器和GDB客户端第一?

时间:2014-04-14 18:21:56

标签: gdb

GDB客户端:

NetworkClientConnect 503:尝试主持人:10.23.37.155(地址:02CE4B50)

NetworkClientConnect 518:已连接到主机:10.23.37.155

NetworkClientRecv 576: Recv Packet:+

NetworkClientSend 550:已发送数据包:+

GDB服务器:

Debug:243 275 pld.c:207 handle_pld_init_command():初始化PLD ......

信息:244 22937 server.c:83 add_connection():接受来自3333的“gdb”连接

调试:247 22954 gdb_server.c:260 gdb_get_char_inner():收到'+'

Debug:248 22954 gdb_server.c:272 gdb_get_char_inner():返回char'+'(0x2b)

最初建立连接然后他们通过发送“+”确认他们收到了数据包。在我的情况下,客户端说它收到一个'+',服务器也是第一个信息交换。那没有意义。一个必须发送,另一个接收我看到的并行接收和发送。但它正在发挥作用。那我的想法在哪里错了?此外,如果您可以指向一个URL,该URL显示GDB服务器和客户端协议交换将是非常棒的。

2 个答案:

答案 0 :(得分:1)

在您的GDB客户端打印输出中,它在我看来,消息不按顺序打印(请参阅Recv数据包的编号为576,并发送了550)。

使用wireshark或类似工具调试此类问题。

我尝试通过loopback连接到gdbserver,根据wireshark,对话框如下所示:

  1. 客户端发送" +"
  2. 客户端发送" $ qSupported:multiprocess +; xmlRegisters = i386; qRelocInsn +#b5"
  3. 服务器发送" +"
  4. 服务器发送" $ PacketSize = 3fff; QPassSignals +; ..."
  5. 等等。

    Gdb确实有助于在运行时选择可以帮助调试此类事情的选项。启动它,然后发出"设置debug remote 1"。在远程方面相同。通过" gdbserver --remote-debug ..."启动gdbserver。这将在双方打印远程gdb协议对话。

    另一个可能是最好的,如果最耗时的选项是检查gdb和gdbserver源。

答案 1 :(得分:0)

我进入了WireShark帮助论坛(http://ask.wireshark.org/)并在那里提出了问题。 “如何在2个IP之间捕获数据包”。有一个叫Quadratic的人给出了一个很好的答案。您可以参考WireShark网站或此处。它就像一个魅力!!

这样做: •当您第一次启动Wireshark时,单击左上角的按钮,当您滚动它时,单击“列出可用的捕获接口”。 •在打开的新“捕获接口”窗口中​​,选择要捕获数据包的接口(左侧有复选框),然后单击“选项”。 •在“捕获选项”窗口的左下角,应该有一个“自动停止捕获......后”。检查“数据包”选项并输入值50 •在相同的“捕获选项”窗口中,在“捕获过滤器”右侧的文本框中,键入语句(不带引号)“ip host 10.xx.xx.xx和ip host 10.yy.yy.yy”。 •点击开始按钮:) 需要注意的一件小事 - 如果您正在捕获的接口正在进行vlan标记,请将捕获过滤器语句替换为“vlan和ip host 10.xx.xx.xx和ip host 10.yy.yy.yy”,不带引号。 编辑: 更简单的解决方案是只使用一个命令行语句: C:\ Program Files \ Wireshark \ dumpcap.exe -c 50 -i {接口名称或编号} -w {您想要保存数据包捕获文件的位置}