# 关于调试符号

> Understand how debugging symbols map program addresses to function names for readable crash stack traces.

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

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

* **系统 (OS) 符号**：系统符号由操作系统供应商生成，并根据操作系统的不同而采用不同的格式。Apple 平台使用 dSYM 文件夹，Android 符号存储在 .so 文件中，而 Windows 符号存储在 .pdb 文件中。Unity 支持由 Apple、Google 和 Microsoft 生成的符号。

* **应用程序 (Unity) 符号**：构建 Unity 项目时会自动生成应用程序符号。

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


**Frame:**
![](/api/media?file=/cloud-diagnostics/media/images/debugging-symbolspageemptystate.png)

## 了解系统符号缺失问题##understanding-missing-system-symbols

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

* \<system symbols missing>

* \<symbols missing for uuid: xxx...>

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

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

## 了解应用程序符号缺失问题##understanding-missing-application-symbols

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

\<symbols missing for uuid: xxx...>

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

要对符号上传失败问题进行故障排除，请检查 symbol\_upload.log 文件，该文件与[主 Unity 日志](https://docs.unity3d.com/Manual/LogFiles.html)位于同一文件夹中。该文件应该会指示找到并处理的符号，以及在处理和上传这些符号时发生的任何错误。

## 后续工作##whats-next

如果崩溃和异常报告包含符号缺失问题，请从 Dashboard（后台）上传符号文件。请参阅[上传符号文件](./uploading-symbol-files.md)。
