将源附加到 Xcode 中的二进制 dylib

Attaching sources to a binary dylib in Xcode

我的 iOS 应用程序中有一个带有 dylib 的框架,它是在另一台机器上编译的。 我检查了我机器上的源代码并尝试指示 lldb 使用以下方式映射源代码路径:

settings set target.source-map /source/code/path/in/dylib/prefix /source/code/path/on/my/machine/prefix

没用,还在看组装。

注意#1:dylib 是从 Xcode.

相同版本的 C++ 代码编译而来的

注意 #2:我用 nm -pa /path/to/dylib 来确定文件路径是否嵌入到调试信息中,而它们是,lldb 由于某种原因不配合使用。

谢谢

更新

我遵循了 Jim Ingham 在下面的回答并创建了一个自动执行此操作的脚本,该脚本可作为要点 link 在我写的这篇文章中使用:https://medium.com/@maxraskin/background-1b4b6a9c65be

要调试在一台机器上构建但在另一台机器上调试的代码,您必须构建 dSYM 并在您正在调试的机器上可用。如果你还没有这样做,什么都不会起作用。

接下来要检查的是 lldb 正在获取 dSYM。此页面对此过程的工作原理进行了一些描述:

http://lldb.llvm.org/symbols.html

但如果这些都不行,您可以使用add-dsym命令手动添加。

如果仍然没有解决您的问题,那么在您的 dylib 中选择一些符号,然后执行:

(lldb) image lookup -vn <SYMBOL_NAME>

或者在加载的 dylib 中找到一些地址并执行:

(lldb) image lookup -va <ADDRESS>

如果 lldb 找到 dSYM 并且调试信息正确,输出行之一应该是 "Compile Unit" 的条目。这就是调试信息所说的源文件路径。该路径的适当基础是您应该在 target.source-map 中使用的内容。如果您没有看到该条目,则该编译单元的调试信息不​​知何故丢失了。

如果所有这些看起来都不错,而 lldb 仍然没有看到源文件,那么您可能遇到了一个错误,在这种情况下,请使用 http://bugreporter.apple.com.

提交错误