GDB无法打开共享对象

时间:2016-09-14 09:36:48

标签: gdb

我遇到了这里多次讨论过的问题:应用程序在直接从shell启动时运行,当我尝试在同一个shell中的调试器中启动它时不运行。在GDB内部运行会产生“无法打开共享对象”错误。

我已阅读所有帖子,并提出了所有建议:

  1. 我手动设置LD_LIBRARY_PATH并验证我的应用运行且ldd -r没有错误地通过
  2. 我在GDB中将solib-search-pathsolib-absolute-prefix设置为与LD_LIBRARY_PATH和'/'相同的值。所有路径都是绝对的
  3. 我使用strace运行GDB以查看GDB查找所需共享库的位置,并发现它忽略了LD_LIBRARY_PATH / solib-search-path
  4. 中的目录列表

    我该怎么办?

    这是使用RHEL 7的GDB 7.11.1

1 个答案:

答案 0 :(得分:1)

  

我有问题

如果你这样做,你在描述你的问题实际上是做得很差。

  

我用strace运行GDB,看看GDB在哪里查找所需的共享库,发现它忽略了目录列表

GDB 不会查找任何共享库,直到运行时加载程序通知某个共享库已添加到进程中。

如果你没有附属于一个低劣的人,那么GDB就不会寻找任何图书馆,你可能会得出一个完全错误的结论。

P.S。 GDB em>也不需要(除非你正在进行远程调试,或者分析来自不同机器的LD_LIBRARY_PATH)。

<强>更新

  

应用程序在直接从shell启动时运行,当我尝试在调试器中启动它时不运行

在我见过的99.9%的案例中,发生这种情况是因为solib-search-path或某些此类错误地重置 solib-absolute-prefix。 GDB启动一个 new shell来运行该应用程序,而如果(非交互式)shell重置环境,则应用程序在GDB内外的行为可能不同。

正确的解决方案是使core(或任何适合您的shell的shell启动文件)在非交互式运行时不执行任何操作。