Qt Creator 2.7.1 和 Qt 4.8.4 无法远程调试库

Posted

技术标签:

【中文标题】Qt Creator 2.7.1 和 Qt 4.8.4 无法远程调试库【英文标题】:Qt Creator 2.7.1 and Qt 4.8.4 Cannot Remotely Debug Library 【发布时间】:2013-05-27 16:37:54 【问题描述】:

使用 Qt Creator 2.7.1 和 Qt 4.8.4,我创建了一个 Qt 库和一个简单的 Qt 应用程序,该应用程序可以动态链接到该库。我正在尝试远程部署和调试我的应用程序,并在调用它们时进入我的库函数。我可以成功设置断点并进行远程调试,但我无法使用调试器 ( gdb ) 进入我的库函数。当我第一次在调试模式下使用 QtCreator 远程启动我的应用程序时,我遇到了以下警告:

Could not load shared library symbols for 7 libraries, e.g. libcustom-stuff.so.1.
Use the "info sharedlibrary" command to see the complete listing.
Do you need "set solib-search-path" or "set sysroot"?

我的调试器是使用 QtCreator 设置的,如这些图像所示(请注意,我已在图像 #3 中切换了“目标路径”和“路径”,但它没有帮助:

我的“套件”设置如下:

在 Qt Creator 的“调试器日志”中,我输入了“命令”:

info sharedlibrary

我收到了回复:

>~"From        To          Syms Read   Shared Object Library\n"
>~"0x400007e0  0x40011bf0  Yes         /home/user/proj/output/buildroot/host/usr/arm-buildroot-linux-gnueabi/sysroot/lib/ld-linux.so.3\n"
>~"                        No          libcustom-stuff.so.1\n"
>~"0x4006d018  0x400d7124  Yes         /home/user/proj/output/buildroot/host/usr/arm-buildroot-linux-gnueabi/sysroot/usr/lib/libQtDBus.so.4\n"
>~"0x401065c4  0x4013dd18  Yes         /home/user/proj/output/buildroot/host/usr/arm-buildroot-linux-gnueabi/sysroot/usr/lib/libQtXml.so.4\n"
>~"0x40172430  0x4024c1b4  Yes         /home/user/proj/output/buildroot/host/usr/arm-buildroot-linux-gnueabi/sysroot/usr/lib/libQtNetwork.so.4\n"

我还确保库和应用程序都是使用以下内容构建的:

CONFIG+=declarative_debug

在库和应用程序的“编译输出”窗格中,我看到了“-g”标志。

它们都驻留在文件系统上的同一个目录中,所以这是怎么回事!为什么我可以在应用程序中调试和设置断点,但不能进入库调用?非常感谢任何想法。

更新:

根据 kikeenrique 的建议,我尝试从我的 Ubuntu 主机(不是 ARM 目标)加载调试符号:

GNU gdb (Ubuntu/Linaro 7.4-0~69~lucid1) 7.4
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i486-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Welcome to Fluke GDB Init Script for QtCreator
Reading symbols from /home/user/proj/output/exported-nfs/home/user/libcustom-stuff.so.1.0.0...done.
(gdb)

似乎 GDB 至少可以加载符号..

【问题讨论】:

【参考方案1】:

您是否为远程应用使用不同的架构?

如果它们不同,您将需要使用相同的 gdb 服务器和客户端架构。

尝试在您的项目中设置 LD_LIBRARY_PATH->构建和运行->使用库的路径构建环境。

【讨论】:

是的,远程架构是 ARM。我可以在我的主应用程序中正常调试,但无法通过调试我的主应用程序进入我的库(也是为 ARM 构建的)。 @philbot 尝试在 gdb 中手动加载符号文件(命令符号文件路径/to/your/library)。 libcustom-stuff.so 的路径是什么? 我可以从我的主机手动加载它们 - 请参阅上面我编辑的帖子。应用程序和库都在目标的 /home/user 中。 @PhilBot 你可以尝试在你的项目中设置 LD_LIBRARY_PATH -> 构建和运行 -> 使用库的路径构建环境吗? 哇 - 这有效,我的 LD_LIBRARY_PATH 错误。非常感谢。

以上是关于Qt Creator 2.7.1 和 Qt 4.8.4 无法远程调试库的主要内容,如果未能解决你的问题,请参考以下文章

QT Creator 添加 -Xarch

centos 下怎么装qt? linux 新手

无法从 Qt Creator 部署 Qt 项目

QT4.8.6安装教程

Qt5 和 Qt 4.8 中的模型和角色

Qt creator交叉编译带图片的程序出现问题,版本4.7