【问题标题】:Attaching sources to a binary dylib in Xcode在 Xcode 中将源附加到二进制 dylib
【发布时间】:2017-06-01 13:38:35
【问题描述】:

我的 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

【问题讨论】:

    标签: c++ ios xcode lldb dylib


    【解决方案1】:

    要调试在一台机器上构建但在另一台机器上调试的代码,您必须构建一个 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 提交错误。

    【讨论】:

    • 感谢您的详细回复,这很有效,我确实错过了 dSYM。我用add-dsym指出dSYM路径,然后用image lookup -vn &lt;SYMBOL_NAME&gt;得到符号源代码路径,然后用settings set target.source-map /path/prefix/i/got/from/lookup /path/prefix/on/my/machine改映射。
    • btw - 对于 dylib 的 Debug 构建,是否需要 dSYM,或者是否将相同的数据嵌入到 dwarf 文件中?
    • 在 OS X 上,编译器将调试信息写入 .o 文件,并在最终的二进制映像中写入“调试映射”,告诉 lldb 如何找到 .o 文件并链接 dwarf在他们之中。因此,如果您在适当的位置进行调试,则不需要 dSYM。但是,如果您在删除 Intermediates 文件夹后调试二进制文件,或者在没有该目录或将其放在不同位置的机器上,则需要制作 dSYM 并使用 dSYM 进行调试。
    • 不确定这是否是同一个问题,但是在使用 flex 时,我在调试时没有看到派生源的关联。派生源的路径是例如 Project/Build/Intermediates/XCodeSnaz.build/Debug/XCodeSnaz.build/DerivedSources/lexer.yy.cpp 使用“image lookup -vn cFlexLexer”找到该文件,但没有源代码关联。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 2011-12-11
    • 1970-01-01
    • 2021-11-15
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多