【问题标题】:set sysroot command vs set solib-search-path command设置 sysroot 命令与设置 solib-search-path 命令
【发布时间】:2017-11-22 01:42:14
【问题描述】:

我对 set solib-search-path 和 set sysroot 命令感到困惑,不确定何时使用其中一个或另一个。在我的情况下,仅当我使用这两个命令时才加载符号。是否总是需要两个命令以及每个命令的作用。

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

【问题讨论】:

  • @EmployedRussian,set sysroot 和 set solib-absolute-prefix 是否相同
  • 我觉得他们是一样的
  • 他们是别名:help solib-absolute-prefix:Set an alternate system root.
  • @EmployedRussian 重复的问题不是重复的。 solib-absolute-prefix 与 solib-search-path 不同。这个问题是“set sysroot”与“set solib-search-path”。标记为重复的问题是“set solib-search-path”与“set solib-absolute-prefix”。
  • 你使用绝对路径还是相对路径?请添加传递给设置命令的路径示例。

标签: c++ c gdb


【解决方案1】:

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

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

设置 solib-search-path 路径

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

正如thread 中所指出的,solib-search-path 的用例是:

solib-search-path 主要用于帮助 Windows 等目标 不要向调试器报告共享库的完整路径。 GNU/Linux 总是使用完整的补丁,例如 "/usr/lib/libjpeg.so.8"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 2015-01-28
    • 2016-12-19
    • 1970-01-01
    • 2013-11-02
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多