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

标签 ios debugging linker static-libraries

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

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

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

dwarfdump/path/to/app.dSYM

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

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

  • 在复制过程中去除调试符号:否
  • 剥离链接产品:否
  • 生成调试符号:是
  • 默认隐藏的符号:否

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

最佳答案

静态库符号确实出现在应用程序的 dSYM 文件中,dwarfdump 会揭示这一点。

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

这应该会向您显示 lib 的符号。

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

我不完全确定是否有办法绕过这部分。

关于iOS 静态库调试符号未包含在 dSYM 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11531560/

相关文章:

ios - 计时器在 swift Spritekit 中产生问题

r - 嵌套浏览器调用——仅退出单个上下文

c - 让链接器为 avr/gcc 删除未使用的目标文件

ios - 如何从我通过 API 调用获得的 url 加载图像

ios - 如何让应用程序在连接的设备上运行

ios - 计算器的方案是什么?

c++ - error C3861 : '_T' : identifier not found , 无法将main函数参数作为函数参数传入

python - 使用 gdb 加载 ctypes 的调试库

c++ - undefined reference 错误,即使该类已链接

c++ - 典型的 C++ 编译器处理哪些工作?