GDB:远程加载共享库时出错

时间:2016-08-09 07:55:16

标签: gdb gdbserver

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

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

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

这是我到目前为止所尝试的: -

  1. 在远程计算机上的命令下执行

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

    • gdb ./MY_Application
    • (gdb)target remote:8888
  3. 现在在本地机器上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个。因此,我无法找到这些共享库中存在的符号。

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

    所以我使用了以下命令

    • (gdb)设置sy​​sroot remote:/

    但它再次显示错误消息

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

    任何人都可以告诉我这里我做错了什么?如果有替代解决方案来加载共享库中的符号,请建议。

    P.S。两个MY_Application二进制文件都是相同的。

1 个答案:

答案 0 :(得分:1)

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

file MY_Application

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