在gdb中加载本地共享库

在gdb中加载本地共享库,gdb,shared-objects,Gdb,Shared Objects,我本以为这个问题已经问过了,但我找不到。如果是的话,请容忍我 我正在debian安装中尝试对现有程序进行修改 这个名为foo的程序在编译时会创建一些自己的共享库。我想调试这个程序并进入一个本地共享库,称之为libbar.so 但是,由于这是一个现有的程序,所以已经有一个/usr/lib/libbar.so,我不想覆盖它 那么如何让gdb使用本地libbar.So呢 这个名为foo的程序在编译时会创建一些自己的共享库 您的意思是程序在运行时将自己的libbar.so的副本写入磁盘吗 这是非常不寻常

我本以为这个问题已经问过了,但我找不到。如果是的话,请容忍我

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

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

但是,由于这是一个现有的程序,所以已经有一个/usr/lib/libbar.so,我不想覆盖它

那么如何让gdb使用本地libbar.So呢

这个名为foo的程序在编译时会创建一些自己的共享库

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

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

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

如果程序实际上加载了本地
libbar.so
,那么这种情况应该已经发生了

可能发生的情况是,当您运行程序时,它加载
/usr/lib/libbar.so
,然后GDB使用程序已经加载的内容(您可以通过使用
info shared
GDB命令查看GDB认为加载的内容)

如果您想让您的程序加载
libbar.so
的本地副本,您需要调整
LD\u LIBRARY\u PATH
,或修改
DT\u RPATH
DT\u RUNPATH
烘焙到程序中,使用
-Wl,-RPATH=/PATH/to/lib
(本地
libbar.so
位于
/PATH/to/libbar.so
)。一旦您这样做,GDB将自动拾取本地
libbar.so