在GDB中的solib-absolute-prefix与solib-search-path

时间:2014-07-22 19:24:54

标签: gdb kgdb

我阅读了两者的描述,但我还不了解其中的区别。任何人都可以帮我理解这些差异吗?

set solib-absolute-prefix -
Specifies the local directory that contains copies of target libraries in the 
corresponding subdirectories. This option is useful when debugging with gdbserver.

set solib-search-path command - 
Specifies directories where GDB will search for shared libraries with symbols. This option        
is useful when debugging with gdbserver.

感谢。

1 个答案:

答案 0 :(得分:22)

措辞不太清楚: - (

假设您的目标已加载/usr/lib/libfoo.so,并且在主机上(GDB正在运行),您在/tmp/host中拥有整个目标树的副本。也就是说,在/usr/lib/libfoo.so的主机上找到了目标/tmp/host/usr/lib/libfoo.so的副本。

然后,以下命令几乎相同:

set solib-absolute-prefix /tmp/host
set solib-search-path /tmp/host/usr/lib

现在考虑如果您在目标上有/usr/local/lib/libbar.so,在/tmp/host/usr/local/lib/libbar.so中有solib-absolute-prefix的副本,会发生什么。

上面设置的libbar.so仍然可以找到solib-search-path,但set solib-search-path /tmp/host/usr/lib:/tmp/host/usr/local/lib 必须像以下一样进行修改:

$ROOT

总结一下,如果您在单个主机solib-absolute-prefix下有整个目标树,那么只需将$ROOT设置为solib-search-path你应该做得很好。

如果你必须从多个不相交的树“组装”目标路径,那么{{1}}有多个路径将允许GDB仍然找到正确的库。