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.
相关推荐
2501_915921435 小时前
iOS 虚拟位置设置实战,多工具协同打造精准调试与场景模拟环境
android·ios·小程序·https·uni-app·iphone·webview
QuantumLeap丶5 小时前
《Flutter全栈开发实战指南:从零到高级》- 11 -状态管理Provider
android·flutter·ios
2501_916008895 小时前
App 上架需要什么?从开发者账号到开心上架(Appuploader)免 Mac 上传的完整流程指南
macos·ios·小程序·uni-app·objective-c·cocoa·iphone
QuantumLeap丶1 天前
《Flutter全栈开发实战指南:从零到高级》- 09 -常用UI组件库实战
flutter·ios·dart
2501_915918411 天前
App 上架苹果商店全流程详解 从开发者账号申请到开心上架(Appuploader)跨平台免 Mac 上传实战指南
macos·ios·小程序·uni-app·objective-c·cocoa·iphone
2501_916007471 天前
从零开始学习iOS App开发:Xcode、Swift和发布到App Store完整教程
android·学习·ios·小程序·uni-app·iphone·xcode
Pluto5381 天前
第一个app产品的迭代
ios·github
2501_915921431 天前
iOS 26 CPU 使用率监控策略 多工具协同构建性能探索体系
android·ios·小程序·https·uni-app·iphone·webview
狂团商城小师妹1 天前
JAVA国际版同城打车源码同城服务线下结账系统源码适配PAD支持Android+IOS+H5
android·java·ios·小程序·交友
游戏开发爱好者81 天前
iOS 应用逆向对抗手段,多工具组合实战(iOS 逆向防护/IPA 混淆/无源码加固/Ipa Guard CLI 实操)
android·ios·小程序·https·uni-app·iphone·webview