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

时间:2017-01-17 13:06:27

标签: c++ ios xcode lldb dylib

我的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的回答创建了一个自动执行此操作的脚本,该脚本在我撰写的这篇文章中作为主要内容提供:https://medium.com/@maxraskin/background-1b4b6a9c65be

1 个答案:

答案 0 :(得分:11)

要调试在一台计算机上构建但在另一台计算机上调试的代码,您必须构建一个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并且调试信息正确,则其中一行输出应该是“编译单元”的条目。这就是调试信息所说的源文件路径。该路径的适当基础是您应该在target.source-map中使用的。如果您没有看到该条目,那么该编译单元的调试信息就会以某种方式丢失。

如果所有这些内容看起来都很好并且lldb仍然没有看到源文件,那么您可能会遇到错误,在这种情况下请提交http://bugreporter.apple.com的错误。