【问题标题】:QT Remote debug. Stepping into shared libraryQT 远程调试。步入共享库
【发布时间】:2014-08-07 15:08:48
【问题描述】:

我已经使用 qtcreator 交叉编译了 qt。调试效果很好,但是当我尝试进入(F11)在(我的)外部共享库中定义的函数时,我看到 gdb 挂起并最终失败并出现以下错误:

115^error,msg="回复包含无效的十六进制数字 116"
COOKIE FOR TOKEN 115 ALREADY EATEN (InferiorStopOk)。一个命令有两个响应?
可执行文件失败:回复包含无效的十六进制数字 116

有什么想法吗?

【问题讨论】:

    标签: qt debugging gdb shared-libraries cross-compiling


    【解决方案1】:

    可能是:

    1. 与通信协议无关的一般 gdb 错误,

    2. gdb 通信协议实现中的一个 gdb 错误,

    3. gdb 通信协议实现中的 Qt Creator 错误。

    因为无论如何它都是一个错误,所以您需要将好的信息放入错误报告中。检查 Qt Creator 的调试器日志以准确了解它何时发生。然后,您可以尝试从 gdb 的命令行手动重现相同的命令流。如果你成功了,那么#1 不太可能。您可以使用另一个 IDE(比如 Eclipse)来区分 #2 和 #3,但请记住,另一个 IDE 不太可能发出 Qt Creator 会发出的相同命令。

    唯一可靠的调试方法是在 Qt Creator 和 gdb 之间插入一个小程序,转储 Qt Creator 发送的命令,然后在没有 Qt Creator 的情况下重放它们。然后,您需要解析响应并确定它们是否有效。如果是,那么 #1 和 #2 都不成立,这很可能是 Qt Creator 错误,#3。

    【讨论】:

      【解决方案2】:

      'error,msg=' 由 GDB 生成以响应 GDBserver 消息。不涉及 Qt Creator 与 GDB 的通信。所以这是 GDB 和 GDBserver 之间的错误通信。

      那是一个合适的 GDBserver,以及那个目标架构的 GDB 吗?

      顺便说一句,不需要程序来拦截 Qt Creator 发送到 GDB 的内容,它们都列在调试器日志的左侧窗格中。

      【讨论】:

        【解决方案3】:

        我发现问题与使用“步入”(F11)功能有关。

        莫名其妙地,您可以避免此消息在库中切换断点并简单地使用播放功能 (F5) 来调试您的库。

        感谢您的回复。在关注真正的问题之前,我已经做了很多测试。

        【讨论】:

          猜你喜欢
          • 2011-06-29
          • 2013-05-27
          • 1970-01-01
          • 2014-04-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-26
          相关资源
          最近更新 更多