3

问题

当我在 Xcode 中反复构建发布时,生成的 dSYM 完全为空,因此调试器无法显示任何内容。

我已经能够在Xcode 11.3.1中用一个最小的项目重现这一点,如下所示:

  • 文件 -> 新项目(macOS、App、Objective-C)
  • 在目标的构建设置中:
    • 设置DEPLOYMENT_POSTPROCESSINGRelease_YES
  • 产品 -> 方案 -> 编辑方案
    • 设置Build ConfigurationRelease
  • 产品 -> 构建
  • 更改未编译成二进制文件的文件(例如更改版权声明Info.plist
  • 产品 -> 构建

现在在GenerateDSYMFile步骤的构建日志中有一个警告

warning: no debug symbols in executable (-arch x86_64)

如果生成的应用程序运行,将没有调试信息(您不能在 Xcode 中设置断点,如果您手动中断堆栈帧将只是___lldb_unnamed_symbol,...)

到目前为止我发现了什么

Xcode 构建过程的相关部分似乎是:

  1. 链接目标文件以形成二进制文件(仅当其中至少一个已更改时)
  2. 从二进制生成 dSYM 文件(如果输出中的任何内容发生了变化)
  3. 剥离二进制文件,即删除调试符号(如果输出中的任何内容发生了变化)

所以 1) 在重复构建中被跳过,因为源(以及目标文件)没有改变。2) 被执行,因为Info.plist已更改,但它对已被先前构建剥离的二进制文件进行操作。因此,dSYM 为空。

看起来 2) 只应在与 1) 相同的条件下重新运行,但这些依赖项似乎在 Xcode 中是硬连线的......

有没有办法解决这个问题?

4

0 回答 0