iOS Debug Symbols

概述

当Xcode把源代码编译成机器码的时候,会生成应用程序的符号列表:

  • 类名
  • 全局变量
  • 方法和函数名称。

这些符号与定义他们的文件及行号相对应,形成了调试符号(debug symbol)。Debug模式默认将符号嵌入到了二进制文件中,Release版本为了减少包体积则存储在独立的dSYM调试符号文件中

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 全称: Debug Symbol file 文件扩展名:.dSYM 作用:存储已编译二进制文件的调试符号信息,包括类名、方法名、全局变量的呢过,以及它们在源代码中的文件和行号对应关系。 用途: * 在应用崩溃时,将崩溃报告中的内存地址(stack trace)转换为可读的函数名、方法名和行号。 * 用于远程调试、分析Crash Reports |

应用中每个二进制文件:主应用的可执行文件、framework、app extension,都有自己的dSYM文件。编译出来的二进制文件和对应的dSYM文件会通过一个构建UUID(build UUID)绑定。这个UUID会同时记录在二进制文件和dSYM文件中。如果用不同的Xcode版本或不同的build settings,从相同的源码编译出两个二进制文件,他们的build UUID也不相同。只有当二进制文件和dSYM文件的build UUID完全一致时,才能相互匹配。

因此,必须保留分发出去的特定构建对应的特定dSYM文件,才能分析崩溃报告。

构建带符号信息的应用

在分发应用前,需要确认Debug Information Format构建设置已设置为DWARF with dSYM File,这样才能生成所需的dSYM文件,以便在应用发布后诊断崩溃问题。

这里的Debug Information Format选项含义如下:

选项 含义 使用场景 说明
DWARF 只生成DWARF格式的调试信息,并嵌入到编译后的二进制中 1.默认Debug构建应用 2.不生成独立dSYM文件 3.适合开发调试 源码 → Xcode编译 → Binary(包含调试符号)
DWAFR with dSYM File 生成DWARF调试信息,并生成独立的dSYM文件 1.Release构建推荐使用 2.减少包体积 3.可以符号化发布版本的崩溃日志 4.符合App Store上传要求 源码 → Xcode编译 → Binary(不含调试符号) + dSYM文件(独立)

关于如何配置target的build settings,可参见:Configuring the build settings of a target

|-----------------------------------|
| Crash Log + dSYM文件 → 可读函数名+文件名+行号 |

生成的dSYM文件是应用发布后进行调试最常用的符号文件

发布带符号信息的应用

当分发归档应用时,Xcode会收集应用的所有二进制文件和dSYM文件,并将它们存储在Xcode归档中。

如果开发者通过App Store分发应用,或者使用TF进行Beta测试,可以选择在上传应用到App Store Connect时包含符号文件。

  • 如果包含符号文件,App Store会将应用的符号名添加到崩溃文件中,再传递给Xcode的 Crash管理器。
  • 如果未包含符号文件,虽然可以在Crashes中收到崩溃,但是没有进行符号化。如果本地Mac上有保存对应的dSYM文件,Xcode仍然可以将这些崩溃报告不全符号信息。

|---------------------------------------------------------|
| 开发者必须保留每一个分发出去的应用构建对应的Xcode归档,如果没有这些归档文件,将无法根据崩溃报告诊断问题。 |

Crash管理工具

打开Xcode,登录开发者账号 ,然后选择菜单栏的Window → Organizer → Crashes

参考链接

1.Diagnosing issues using crash reports and device logs

1.Building your app to include debugging information

3.Crashes organizer

  1. Distributing your app for beta testing and releases.
相关推荐
恋猫de小郭13 小时前
Fluttercon EU 2025 :Let‘s go far with Flutter
android·开发语言·flutter·ios·golang
2501_9159090619 小时前
iOS 抓包工具有哪些?实战对比、场景分工与开发者排查流程
android·开发语言·ios·小程序·uni-app·php·iphone
2501_915918412 天前
iOS 框架全解析,原生框架与跨平台框架对比、开发应用打包与 App Store 上架实战经验
android·ios·小程序·https·uni-app·iphone·webview
Everbrilliant892 天前
Xcode上编译调试ffmpeg
macos·ffmpeg·xcode·ffmpeg源码编译工具·xcode调试ffmpeg源码·ffmpeg工具环境变量配置
感谢地心引力2 天前
iOS26 打开开发者模式
windows·macos·ios·iphone·ios26
低调小一2 天前
iPhone美区账号登录指南:轻松下载ChatGPT应用
ios·chatgpt·iphone
2501_916007473 天前
前端开发工具都有哪些?常用前端开发工具清单与场景化推荐
android·ios·小程序·https·uni-app·iphone·webview
2501_915909063 天前
iOS 应用上架全流程解析,苹果应用发布步骤、ipa 上传工具、TestFlight 测试与 App Store 审核经验
android·macos·ios·小程序·uni-app·cocoa·iphone
Jouzzy3 天前
【iOS安全】iPhone X iOS 16.7.11 (20H360) Palera1n MacOS版 越狱教程
macos·ios·iphone
ZFJ_张福杰3 天前
【Flutter】GetX最佳实践与避坑指南
android·flutter·ios·getx