【问题标题】: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】:
可能是:
与通信协议无关的一般 gdb 错误,
gdb 通信协议实现中的一个 gdb 错误,
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) 来调试您的库。
感谢您的回复。在关注真正的问题之前,我已经做了很多测试。