【问题标题】:Cannot load shared libraries in gdb无法在 gdb 中加载共享库
【发布时间】:2015-02-05 19:26:59
【问题描述】:

我正在尝试在gdb 中运行应用程序,但似乎我的调试器有问题。我无法按照我尝试的所有方式加载共享库。

库存放在/usr/local/lib64,环境还可以:

echo $LD_LIBRARY_PATH
/usr/local/lib64:/home/user/lib

当我在gdb 中运行应用程序时,会发生以下情况:

(gdb) set solib-search-path /usr/local/lib64
(gdb) show solib-search-path The search path for loading non-absolute
shared library symbol files is /usr/local/lib64. 
(gdb) info sharedlibrary No shared libraries loaded at this time.

我无法设置任何断点来调试我的应用程序,但同时应用程序在 gdb 中运行正常,并且调试符号正在从二进制文件中读取!

我猜,问题与权限有关,但不知道具体在哪里。

为避免任何误解,我应该注意到我的应用程序运行良好,并且我在访问共享库时没有任何问题。

【问题讨论】:

    标签: linux gdb


    【解决方案1】:

    当我在 gbd 中运行应用程序时,会发生以下情况:

    您还没有真正运行该应用程序,所以“此时没有加载共享库”是正确的并且预期

    您需要实际执行 GDB run 命令。

    更新:

    我可以执行运行命令,这很奇怪。

    不,这并不奇怪。您没有问题,一切正常。

    我猜你的真正问题是你不能在你的应用程序使用的共享库中设置断点。 那个问题的解决方案是这样做:

    gdb /path/to/app
    (gdb) start
    
    # Application stops at main.
    # You can now set any breakpoint you want.
    (gdb) break foo.c:123
    

    【讨论】:

    • @mortalland 你在解释你真正的问题是什么方面做得不好。根据我目前对它可能是什么的猜测更新了答案。
    • 是的,正如@EmployedRussian 所说,执行运行命令一点也不奇怪。当您执行和运行您的应用程序时,您的共享库(.so 文件)将被加载。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 2014-10-26
    • 2014-11-06
    • 2021-11-04
    • 2021-10-12
    • 1970-01-01
    相关资源
    最近更新 更多