set sysroot command vs set solib-search-path命令

时间:2017-11-22 01:42:15

标签: c++ c gdb

我对命令设置solib-search-path和设置sysroot感到困惑,不确定何时使用其中一个或另一个。在我的情况下,只有在我使用这两个命令时才会加载符号。始终是命令都是必需的以及每个命令的作用。

对于这里http://visualgdb.com/gdbreference/commands/,看起来sysroot看起来也在子目录中,那么为什么需要solib-search-path,如果它们都搜索库并从这些库加载符号

1 个答案:

答案 0 :(得分:0)

gdb首先在sysroot(具有绝对路径)中搜索库,然后仅在找不到它们时才搜索solib-search-path(具有相对路径)。

因此,在使用gdb服务器/远程调试时,您可能只想使用gdb的sysroot选项。在使用solib-search-path的Linux系统上,除非您更改sysroot的值,否则它将无法工作,因为sysroot的默认值为target,这意味着gdb会加载在您正在调试的文件系统。这也是gdb的documentation中指出的内容:

设置solib-search-path路径

用冒号分隔的目录列表以搜索共享库。 在'sysroot'无法找到'solib-search-path'后使用 库,或者库的路径是相对的而不是 绝对。如果您要使用“ solib-search-path”而不是“ sysroot”, 确保将“ sysroot”设置为不存在的目录以防止GDB 从查找主持人的图书馆。首选“ sysroot”;设置它 到不存在的目录可能会干扰自动加载 共享库符号。

如本thread所示,solib-search-path的用例是:

solib-search-path主要用于帮助诸如Windows之类的目标 不要向调试器报告共享库的完整路径。 GNU / Linux始终可以使用完整的补丁程序,例如 “ /usr/lib/libjpeg.so.8”