将源附加到 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.
提交错误
我的 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.
提交错误