关于调试符号

符号将程序地址映射到函数名。它们让崩溃和异常报告能够以人类刻度的名称提供原生崩溃 stack trace,而不是使用数字地址。它们可以包含在可执行文件中,但通常存储在单独的文件中,以减小可执行文件的大小。

崩溃和异常报告功能使用以下两套符号:

  • 系统 (OS) 符号:系统符号由操作系统供应商生成,并根据操作系统的不同而采用不同的格式。Apple 平台使用 dSYM 文件夹,Android 符号存储在 .so 文件中,而 Windows 符号存储在 .pdb 文件中。Unity 支持由 Apple、Google 和 Microsoft 生成的符号。
  • 应用程序 (Unity) 符号:构建 Unity 项目时会自动生成应用程序符号。

如果崩溃和异常报告中缺失符号文件,诊断问题可能变得更加困难,因为报告中会显示数字地址。借助崩溃和异常报告服务,您可以上传符号文件来帮助识别报告中的问题。

了解系统符号缺失问题

符号文件具有通用唯一标识符 (UUID) 或全局唯一标识符 (GUID),并且该标识符必须与可执行文件的 ID 完全匹配。如果崩溃和异常报告服务无法加载 ID 与库或模块匹配的符号文件,则会生成以下错误:

如果发生这种情况,问题通常是 Cloud Diagnostics 缺少该操作系统版本的符号。对于 iOS 和其他 Apple 平台,获取旧版操作系统的符号可能较为困难。

如果遇到这种情况,您可以检查是否有关于操作系统另一个版本的相似崩溃报告。如果有,您或许能够通过在那个操作系统版本中进行调试来解决问题。

了解应用程序符号缺失问题

缺失应用程序符号时,报告中会在 stack trace 中包含一行:

在构建启用了崩溃和异常报告的项目时,Unity 会生成一个符号文件并将其上传到崩溃和异常报告服务器。如果此过程失败,Unity Dashboard(Unity 后台)中将显示符号缺失消息。

要对符号上传失败问题进行故障排除,请检查 symbol_upload.log 文件,该文件与主 Unity 日志位于同一文件夹中。该文件应该会指示找到并处理的符号,以及在处理和上传这些符号时发生的任何错误。

后续工作

如果崩溃和异常报告包含符号缺失问题,请从 Dashboard(后台)上传符号文件。请参阅上传符号文件