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

时间:2012-07-17 22:07:16

标签: ios debugging linker static-libraries

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

自己项目中的公共代码库,它以静态库作为目标。该项目被拖入主应用程序的项目中。在主要应用程序的目标构建阶段中,我已将静态库添加为目标依赖项,并在“链接二进制文件库”下添加。该项目按照需要构建和运行。

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

dwarfdump /path/to/app.dSYM

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

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

  • 复制期间剥离调试符号:否
  • 剥离链接产品:否
  • 生成调试符号:是
  • 默认隐藏的符号:否

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

2 个答案:

答案 0 :(得分:4)

静态lib符号 do 显示在应用程序的dSYM文件中,dwarfdump将显示该文件。

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

那应该显示lib的符号。

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

我不完全确定有办法解决这个问题。

答案 1 :(得分:1)

不确定您是否找到了答案,但几天前我遇到了完全相同的问题。我通过以下方式让它发挥作用:

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