【问题标题】:GDB: Error while remotely loading shared librariesGDB:远程加载共享库时出错
【发布时间】:2016-08-09 07:55:15
【问题描述】:

我在 Linux tutnix 3.13.0-30-generic #54-Ubuntu i686 i686 GNU/Linux 上使用 X-server。

在 X-server 上,我使用 schroot 更改根目录,然后在其上运行我的应用程序。

现在的问题是我试图在 X 服务器(比如远程机器)上运行 gdbserver(版本 6.7.1)和在 Ubuntu 机器(本地机器或 X 所在的机器)上运行 gdb(版本 7.7) -server 正在运行),但它不工作。

这是我迄今为止尝试过的:-

  1. 在远程机器上执行以下命令

    • MY_Application &
    • gdbserver localhost:8888 --attach process_id
  2. 在本地机器上执行以下命令

    • gdb ./MY_Application
    • (gdb)目标远程:8888

现在在本地机器上 gdb 正在显示这条消息

Could not load shared library symbols for 20 libraries, e.g. /usr/lib/libqt.so.3. Use the "info sharedlibrary" command to see the complete listing. Do you need "set solib-search-path" or "set sysroot"?

据了解,gdb 无法加载共享库,共有 20 个。因此,我无法找到这些共享库中存在的符号。

我尝试使用gdb 上的symbol-file 命令从本地计算机上的库文件中加载符号,但这会导致地址不匹配

所以我使用了下面的命令

  • (gdb)set sysroot remote:/

但它再次显示错误消息

Could not open 'remote:/usr/local/davis/lib/usr/lib/libqt.so.3' as an executable file: Function not implemented

谁能告诉我我在这里做错了什么?如果有从共享库加载符号的替代解决方案,请提出建议。

附:两个 MY_Application 二进制文件是相同的。

【问题讨论】:

    标签: gdb gdbserver


    【解决方案1】:

    我终于找到了解决问题的方法。 问题出在上面显示的步骤 2 中。不知何故,gdb 没有将所有符号和 PATH 加载到共享库。尽管ldd 命令显示的 PATH 是准确的。但是,如果我只是运行gdb ./MY_Application,它仍然对我不起作用 所以我在此之后又执行了一个命令,即

    file MY_Application

    并且还从 /srv/chroot/loc/usr/local/davis/lib//usr/local/davis/lib/ 之后我将它连接到远程服务器,现在它工作正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-16
      • 2011-05-29
      • 2017-11-05
      • 2014-12-09
      相关资源
      最近更新 更多