【问题标题】:iOS Static Library Debug Symbols not being in included in dSYMdSYM 中未包含 iOS 静态库调试符号
【发布时间】:2012-07-16 21:49:24
【问题描述】:

我正在开发一系列将共享一个通用代码库的 iOS 应用程序。我已将通用代码库开发为静态库,并希望它的调试符号包含在主应用程序的 .dSYM 文件中。我的理解是这是可能的,但我还没有让它工作。

以静态库为目标的自己项目中的通用代码库。该项目被拖入主应用程序的项目中。在主应用程序目标的构建阶段中,我将静态库添加为目标依赖项,并在 Link Binary With Libraries 下添加。项目将根据需要构建和运行。

现在,如果我从主项目生成存档,我可以在 Finder 中查看该存档,它包含一个 .dSYM 文件,可用于符号化崩溃日志。但是,.dSYM 仅包含主应用程序的符号,而不包含静态库的符号。为了过度确认这一点,我运行了以下命令:

dwarfdump /path/to/app.dSYM

并且输出(大部分)不包含静态库中的任何符号。我发现的唯一例外是我的主要项目的 AppDelegate 是静态库中对象的子类,并且 .dSYM 中有该超类的条目。但是,其他类都不存在。

在静态库项目的目标构建设置中,我设置了以下内容:

  • 复制期间去除调试符号:否
  • 条形链接产品:否
  • 生成调试符号:是
  • 默认隐藏符号:否

如果有人可以提供一些指导,我将不胜感激。

【问题讨论】:

  • 你使用的是什么版本的 XCode?​​span>
  • 您解决了这个问题吗?我有同样的问题,仍然无法弄清楚发生了什么。

标签: ios debugging linker static-libraries


【解决方案1】:

静态库符号 do 显示在应用程序的 dSYM 文件中,dwarfdump 会显示这一点。

 dwarfdump -a path/to/app.dSYM >dsymAsText.txt

这应该会显示 lib 的符号。

但是,如果您(就像我最近一直在寻找)要生成的符号表以仅与您的静态库一起使用,我得出的结论是它将毫无用处;一旦它被编译到一个新的应用程序中,这些符号和地址将全部改变,并且你将有一个完全不同的偏移量(如果我错了,请有人纠正我)。

我不完全确定有办法绕过那部分。

【讨论】:

    【解决方案2】:

    不确定您是否找到了答案,但几天前我遇到了完全相同的问题。我通过执行以下操作使其工作:

    1. 创建一个工作区来保存您的主要项目和公共代码库(静态库)。确保项目是同级项目,而不是父/子项目。
    2. 添加目标依赖并链接通用代码库
    3. 确保在通用代码库中包含调试符号
    4. 配置工作区设置以在共享目录中构建所有项目(我相信这是关键)
    5. 如果您收到有关无法找到标头的投诉,您可能需要在构建设置中修改您的用户标头搜索路径或使用源树功能。

    【讨论】:

    • 这有可能成为一个非常好的答案。虽然少了一些东西。 “包含调试符号”是指默认为“是”的 GCC_GENERATE_DEBUGGING_SYMBOLS(生成调试符号)构建设置吗?共享目录也不清楚。默认情况下,工作区中的每个项目都将在派生数据中构建在其自己的目录中。您是否设法让 xcode 在同一目录中构建每个项目?
    猜你喜欢
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    相关资源
    最近更新 更多