如何在 xcode 中设置 lldb 的发现路径

Posted

技术标签:

【中文标题】如何在 xcode 中设置 lldb 的发现路径【英文标题】:How to set the discover path for lldb in xcode 【发布时间】:2014-12-29 14:14:48 【问题描述】:

我在一个环境中构建了一个程序,我想在我自己的环境中调试它。我已经复制了可执行文件、.dSYM 和源代码,但我找不到让 lldb 知道在哪里可以找到源代码的方法。

例如在构建环境中有源文件:

/build_src/rel_path/source1.c
/build_src/rel_path/source1.dSYM
/build_src/rel_path/app1

在我的环境中,文件和 .dSYM 被复制到:

/source/rel_path/source1.c
/source/rel_path/source1.dSYM
/source/rel_path/app1

有没有办法设置发现路径或任何其他方式来重新映射源代码路径?

【问题讨论】:

类似问题:***.com/questions/12973633/… 【参考方案1】:

这就是“target.source-map”设置的用途:

(lldb) settings list target.source-map
  source-map -- Source path remappings used to track the change of location between a source file when built, and where it exists on the current system. 
                It consists of an array of duples, the first element of each duple is some part (starting at the root) of the path to the file when it
                was built, and the second is where the remainder of the original build hierarchy is rooted on the local system.  Each element of the
                array is checked in order and the first one that results in a match wins.

因此,例如在您的情况下,您会这样做:

settings set target.source-map /build_src /source

lldb 有一个 apropos 命令,您可以使用它来查找这些埋藏的好东西,例如,apropos source 会向您显示上面的帮助,以及其他内容的简短列表。

【讨论】:

如果构建文件不再存在但源副本可用,则此方法不起作用。 我不太确定我是否理解你。但是您必须拥有某种形式的调试信息,否则 lldb 无法将源映射到指令。在 macOS 上,调试信息保留在 .o 文件(或 .a 文件,如果您制作它们)中,并且不会链接到最终图像中。如果要在删除中间 .o 文件后进行调试,则需要制作一个dSYM 文件。 Xcode 可以为您执行此操作(选择DWARF with dSYM 调试选项),或者您可以在二进制文件上运行dsymutil 工具。 ELF 通常会将调试信息链接到二进制文件中,因此在 Linux 上不需要这样做。 我应该补充一点,我在 Linux 上使用 lldb。可能会有所不同。 我对 Linux 不是很熟悉。有一种方法可以将调试信息存储在 linux 上的单独文件中,尽管我没有详细说明。也许你无意中这样做了?

以上是关于如何在 xcode 中设置 lldb 的发现路径的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xcode 中设置 $(SRCROOT) 的父路径

如何在xcode项目中设置包含路径

如何使用 pkg-config 在 Xcode 中设置包含路径?

lldb 断点命令在 XCode 8 中不起作用

如何在 Xcode 4.2 中设置外部编辑器

如何为 xcode 添加全局包含路径