GDB加载不正确的库

GDB加载不正确的库,gdb,cgdb,Gdb,Cgdb,我有两个不同版本的库 libxyz.so 在两个不同的地方 1) /home/maverick/dev/libxyz.so ( development Version) 2) /home/maverick/prod/libxyz.so ( Production Version ) /home/maverick/prod/libxyz.so 我有一个编译程序的设置,并根据LD_library_路径与相应版本的库链接。例如,如果我想用libxyz.com的dev版本链接我的程序,那么我将LD_L

我有两个不同版本的库 libxyz.so

在两个不同的地方

1) /home/maverick/dev/libxyz.so ( development Version)
2) /home/maverick/prod/libxyz.so ( Production Version )
/home/maverick/prod/libxyz.so
我有一个编译程序的设置,并根据LD_library_路径与相应版本的库链接。例如,如果我想用libxyz.com的dev版本链接我的程序,那么我将LD_LIBRARY_路径改为add/home/maverick/dev,如果我想用prod版本链接,我将LD_LIBRARY_路径改为add/home/maverick/prod

我通过链接dev version和

ldd MyProg

如果我运行该程序,它将从中加载libxyz.so

/home/maverick/dev/libxyz.so
而且运行良好。 在这一点上,我的LD_库路径包括/home/maverick/dev not/home/maverick/prod

但是当我试图通过GDB调试这个程序时

gdb MyProg
它从位置加载libxyz.so

1) /home/maverick/dev/libxyz.so ( development Version)
2) /home/maverick/prod/libxyz.so ( Production Version )
/home/maverick/prod/libxyz.so
在调试期间,我很难让GDB加载库的正确版本。因此,到目前为止,我所做的是首先启动程序(加载开发版本),并以这种方式将gdb附加到PID上,它工作正常。但是如果它像

gdb MyProg 
没有

我尝试了各种方法来解决这个问题,比如在GDB中设置sysroot和solib搜索路径,但都没有效果。 如果事实上,当我设置sysroot指向库gdb的调试版本时,给出了如下消息

.dynamic section for XXX is not at the expected address
如有任何建议,将不胜感激

在调试期间,我很难让GDB加载库的正确版本

让我猜猜:您正在使用
tcsh
,对吗

问题很可能来自您的
~/.cshrc
LD_LIBRARY_路径
重置为
/home/maverick/prod

当您在GDB中运行程序时,它将执行程序[args…](以便允许您使用I/O重定向)

解决方案:对于非交互式shell,不要触摸
.cshrc
中的环境,例如,从以下内容开始:

if ($?prompt  ==  0) exit

当gdb执行$SHELL-c时,您的程序[args…]是my SHELL(tchs)从.tcshrc读取其环境还是使用当前环境?如果它从.tcshrc中读取,问题在于三个方面。因为在.tcshcrld_LIBRARY_路径中仍然保留着/home/maverick/prod。它成功了,谢谢你。问题的根源在于GDB以这种方式运行程序$SHELL-c您的程序[args…]很高兴知道这一点。