我阅读了两者的描述,但我还不了解其中的区别。任何人都可以帮我理解这些差异吗?
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.
感谢。
答案 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仍然找到正确的库。