GDB:远程加载共享库时出错
GDB: Error while remotely loading shared libraries
我在 Linux tutnix 3.13.0-30-generic #54-Ubuntu i686 i686 GNU/Linux
上使用 X-server。
在 X 服务器上,我使用 schroot 更改根目录,然后我 运行 我的应用程序就在上面。
现在的问题是我正在尝试 运行 gdbserver
(版本 6.7.1)在 X 服务器(比如远程机器)和 gdb
(版本 7.7)上Ubuntu 机器(本地机器或 X-server 运行ning 所在的机器),但它不工作。
这是我到目前为止尝试过的:-
在远程机器上执行以下命令
- MY_Application &
- gdbserver localhost:8888 --attach process_id
在本地机器上执行以下命令
- 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) 远程设置 sysroot:/
但它再次显示错误消息
Could not open 'remote:/usr/local/davis/lib/usr/lib/libqt.so.3' as an executable file: Function not implemented
谁能告诉我我做错了什么?如果有从共享库加载符号的替代解决方案,请提出建议。
P.S。 MY_Application 二进制文件相同。
我终于找到了解决问题的方法。
问题出在上面显示的步骤 2 中。不知何故,gdb 没有将所有符号和 PATH 加载到共享库。尽管使用 ldd
命令显示的 PATH 是准确的。但是如果我只是 运行 gdb ./MY_Application
它仍然对我不起作用
所以我在这之后又执行了一个命令,即
file MY_Application
并且还从
/srv/chroot/loc/usr/local/davis/lib/
到 /usr/local/davis/lib/
之后我将它连接到远程服务器,现在它工作正常。
我在 Linux tutnix 3.13.0-30-generic #54-Ubuntu i686 i686 GNU/Linux
上使用 X-server。
在 X 服务器上,我使用 schroot 更改根目录,然后我 运行 我的应用程序就在上面。
现在的问题是我正在尝试 运行 gdbserver
(版本 6.7.1)在 X 服务器(比如远程机器)和 gdb
(版本 7.7)上Ubuntu 机器(本地机器或 X-server 运行ning 所在的机器),但它不工作。
这是我到目前为止尝试过的:-
在远程机器上执行以下命令
- MY_Application &
- gdbserver localhost:8888 --attach process_id
在本地机器上执行以下命令
- 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) 远程设置 sysroot:/
但它再次显示错误消息
Could not open 'remote:/usr/local/davis/lib/usr/lib/libqt.so.3' as an executable file: Function not implemented
谁能告诉我我做错了什么?如果有从共享库加载符号的替代解决方案,请提出建议。
P.S。 MY_Application 二进制文件相同。
我终于找到了解决问题的方法。
问题出在上面显示的步骤 2 中。不知何故,gdb 没有将所有符号和 PATH 加载到共享库。尽管使用 ldd
命令显示的 PATH 是准确的。但是如果我只是 运行 gdb ./MY_Application
它仍然对我不起作用
所以我在这之后又执行了一个命令,即
file MY_Application
并且还从
/srv/chroot/loc/usr/local/davis/lib/
到 /usr/local/davis/lib/
之后我将它连接到远程服务器,现在它工作正常。