【问题标题】:Qt Creator (4.5 beta) - can't make connection to gdbserverQt Creator (4.5 beta) - 无法连接到 gdbserver
【发布时间】:2017-11-29 20:05:37
【问题描述】:

我一直在为嵌入式 Linux 目标设置远程调试。我已经测试过我在目标上运行的 gdbserver 和在我的工作站上运行的 gdb 客户端的正确组合。我可以启动服务器并在工作站端运行:

(gdb) 目标远程 10.28.22.226:2345

我可以列出源和步骤就好了。

在 Qt Creator 中,我配置了一个设备。在那个窗口中,我指定了 GDB 服务器可执行文件:gdbserver(见图)。

我还在“构建和运行”调试器选项卡中配置了交叉调试器,如下所示:

在这种情况下,我已经手动启动 gdbserver,并在目标上使用端口 2345 上的可执行文件。要开始使用 Qt Creator 进行调试,我选择 Debug->Start Debugging->Attach to running Debug server 下拉菜单。它给了我如下所示的提示,我在其中输入服务器端口(2345)。我给它适当的工具包和本地可执行文件(远程目标上的可执行文件的副本)。

点击 OK 后,它似乎在本地使用一些命令运行 gdb 客户端,然后尝试与 gdbserver 通信超时。我在服务器上打开了调试日志记录,所以我知道服务器永远不会看到客户端从 Qt Creator 运行的任何内容。另外,我做了 Window->Views->Debugger Log 来帮助我更好地了解发生了什么。该日志显示了我的设备的正确 IP 地址和端口,但我没有看到任何看起来像“目标远程 IP:端口”调用的内容。

我在这里寻找提示或参考。我现在似乎有点卡住了。谢谢!

编辑:附加信息 - 我已经验证我的 gdb 客户端支持编译的 python。我看到 Qt Creator 需要 python 支持。我还有进一步的支持,即 Qt Creator 不会发出任何消息。我进行了一次wireshark 捕获,但没有看到目标端口2345 的任何内容。

或者,如果有人愿意与我分享他们的 Qt Creator 调试器日志输出以便我进行比较,那将很有帮助。

【问题讨论】:

  • 这似乎是 4.5 测试版中的一个错误。我运行了 Qt Creator 4.3.1 的副本,并让它工作。在 4.3.1 中,Debug->Start Debugging->Attach to running debug server 出现的对话框有一个“覆盖服务器地址”字段。当我在那里添加我的 IP 地址时,它就可以工作了(没有覆盖它出于某种原因尝试进入 ssh 端口的服务器地址)。我在 QtC 调试器日志中看到了“目标远程 tcp:10.28.22.226:2345”。
  • 我在 bugreports.qt.io 创建了 QTCREATORBUG-19392。
  • 试过 Qt Creator 4.5RC1 没有这个问题。

标签: gdb qt-creator remote-debugging gdbserver


【解决方案1】:

避免使用 Qt Creator 4.5-beta1。看来4.5RC1没有这个问题。我可以使用上述方法进行远程调试。

【讨论】:

    【解决方案2】:

    甚至 QtCreator 4.5.0 似乎也有同样的错误。 我发现的唯一解决方法是在远程目标上手动启动 GDB 服务器:使用“top”我获取远程进程的 pid 进行调试,然后运行以下命令:gdbserver --attach remote ip:远程端口 pid。 服务器监听后,我最终选择:“Attach to Running Debug”服务器”。

    也许您可以在目标上编写一个包含上述语句的服务器启动脚本...

    【讨论】:

    • 在 qt-creator 错误网站上看到了您的评论。我没有使用 Debug 菜单,而是使用 QtC 屏幕左下方的 Play 和 Debug 图标。正确设置部署信息后,这些对我有用。如果选择“播放”,它会复制目标文件并运行。如果是“调试”,它还会远程启动 gdb 服务器。我可以假设您已经设置了一个客户端交叉调试器并将其与您的工具包相关联吗?此外,您的目标上的 gdb 服务器是否在路径中并命名为“gdbserver”?确保设备设置具有正确的 ssh 端口,并在必要时提供可用端口范围。
    • 也许我无法让我理解:当我需要在远程设备上调试应用程序时,这没关系:无论是从调试菜单还是屏幕按钮上的图标。我的问题是调试子进程,即由应用程序创建的进程。我需要打破这个进程而不是主应用程序,并且在 QTCreator 的先前版本中,附加到子进程是有效的。在 v.4,5 中有些东西被破坏了。如果它可以帮助我可以更准确地了解我的应用程序也许其他人可能会感兴趣..
    • 好的,感谢您的澄清。我没有从你的第一条评论中得到这些信息。我没有尝试做你正在做的事情——祝你好运!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多