iOS静态库调试符号未包含在dSYM中

17

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

通用的代码库在其自己的项目中,该项目具有静态库作为目标。该项目被拖入主应用程序的项目中。在主应用程序的目标的构建阶段中,我向 Target Dependency 和 Link Binary With Libraries 中添加了静态库。项目可以按预期构建和运行。

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

dwarfdump /path/to/app.dSYM

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

在静态库项目的目标的生成设置中,我已经设置了以下内容:

  • Strip Debug Symbols During Copy: NO
  • Strip Linked Product: NO
  • Generate Debug Symbols: YES
  • Symbols Hidden by Default: NO

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


你正在使用哪个版本的XCode? - misnomer
你解决了这个问题吗?我也遇到了同样的问题,仍然无法弄清楚发生了什么。 - Vincent
2个回答

4

静态库符号确实会出现在应用程序的dSYM文件中,使用dwarfdump工具可以查看。

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

这将显示库文件的符号。

但是,如果您(像我最近一样)正在寻找生成与您的静态库一起使用的符号表,我得出的结论是它会相当无用;一旦它被编译成新应用程序,这些符号和地址都会改变,并且您将拥有完全不同的偏移量(如果我错了,请有人更正我)。

我不确定是否有方法可以避免这一部分。


1

不确定您是否已经找到了答案,但我几天前遇到了完全相同的问题。以下是我按照以下步骤解决问题的:

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

2
这有潜力成为一个非常好的答案,但还有一些东西缺失。你所说的“包含调试符号”,是指 GCC_GENERATE_DEBUGGING_SYMBOLS(生成调试符号)构建设置吗?默认情况下是开启的。共享目录也不太清楚。默认情况下,工作区中的每个项目都会在派生数据中的自己的目录中进行构建。你是否设法让 Xcode 在同一个目录中构建每个项目? - Onato

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接