在gdb中加载本地共享库

时间:2014-07-18 05:40:54

标签: gdb shared-objects

我原本以为这个问题已经被问过,但是我找不到它。如果是的话请耐心等待。

我正在尝试对debian安装中的现有程序进行修改。

程序,称之为foo,在编译时会创建一些自己的共享库。我想调试程序并进入一个本地共享库,称之为libbar.so。

然而,因为这是一个现有的程序,所以已经有一个/usr/lib/libbar.so,我不想覆盖它。

那么如何让gdb使用本地libbar.so?

1 个答案:

答案 0 :(得分:0)

  

程序,称之为foo,在编译时会创建一些自己的共享库。

你的意思是该程序在运行时将自己的libbar.so副本写入磁盘吗?

这是非常不寻常的。您可能的意思是,当构建程序时,还会构建本地libbar.so

  

我想调试程序并进入其中一个本地共享库,称之为libbar.so。

如果实际上程序加载了本地libbar.so

,这应该已经发生了

可能发生的事情是,当你运行程序时,加载/usr/lib/libbar.so,然后GDB使用程序已加载的内容(你可以看到GDB认为的内容)使用info shared GDB命令加载。

如果您希望自己的程序加载libbar.so的本地副本,则需要调整LD_LIBRARY_PATH,或使用{修改程序中的DT_RPATHDT_RUNPATH。 {1}}(本地-Wl,-rpath=/path/to/lib位于libbar.so)。完成后,GDB将自动选择本地/path/to/lib/libbar.so