如何解析iOS崩溃日志:从获取到符号化分析

一、前言:

作为一个合格的iOS开发者,除了具有规范强悍的编码能力外,还应该具有过硬的查错纠错能力。在项目运行时,程序崩溃是不可避免的,遇到这个问题,有时会出现一大堆的crash日志,艹,貌似看不懂呀。其实没有那么可怕,我们可以将这些日志格式化,通过它来快速定位问题的所在,以便迅速搞定它。

二、分析:

首先我们来看一个crash日志,大略的介绍其中的几个重要的关键词:

关键词解释:

2.1、 进程信息

第一部分是闪退进程的相关信息:

Incident Identifier : 是崩溃报告的唯一标识符。

CrashReporter Key: 是与设备标识相对应的唯一键值。虽然它不是真正的设备标识符,但也是一个非常有用的情报:如果你看到100个崩溃日志的CrashReporter Key值都是相同的,或者只有少数几个不同的CrashReport值,说明这不是一个普遍的问题,只发生在一个或少数几个设备上。

Hardware Model :标识设备类型。 如果很多崩溃日志都是来自相同的设备类型,说明应用只在某特定类型的设备上有问题。上面的日志里,崩溃日志产生的设备是iPhone 4s。

Process:对项目的操作权限,上面的是可读可写

Path:崩溃文件的路径

Identifier:项目标识符,就是Bundle Id

Version:版本号

...等等...

2.2、基本信息

这部分给出了一些基本信息,包括闪退发生的日期Date/Time和时间Launch Time,设备的iOS版本OS Version等。

2.3、异常信息

Exception Type:异常的类型。

Exception Codes :异常错误码

Termination Reason:闪退的原因,比如常见的数组越界啊,什么的。

Triggered by Thread:出现问题在哪个线程,这个比较重要,首先确定在哪个线程中出了问题,然后再去定位。

2.4、线程回溯

这部分提供应用中所有线程的回溯日志。 线程调用的一些,堆栈信息,压根看不懂,所有需要进行符号化处理。

三、解析崩溃日志

除了使用Xcode自带的工具,开发者也可以利用Keymob助手进行崩溃日志分析。Keymob提供了日志与崩溃信息查看功能,支持过滤和符号化分析,比Xcode控制台更便捷,能够帮助快速定位问题。

用Xcode自带的 symbolicatecrash 工具来解析的.crash文件

3.1、获取crash文件:

a.直接从设备中获取方法如下图

b.如果产品在上架过程中发生崩溃,苹果那边的测试人员给我们直接发送过来已经整理好的崩溃日志文件,只需要根据其解决问题就行。

3.2、找到app包所对应的.dSYM文件。

强调要对应.dSYM 是保存 16 进制函数地址映射信息的中转文件,我们调试的 symbols 都会包含在这个文件中,并且每次编译项目的时候都会生成一个新的 dSYM 文件。测试给过来的.crash文件中,关于崩溃的确切语句和函数部分只有16进制地址符号,并不是我们在xcode调试时看到的xxx.cpp(xxfunction xx行)这样的。一般发布一个版本需要保存好对应的.dSYM和.app包,方便分析crash。如图所示:

3.3、就是找到Xcode中的symbolicatecrash工具咯,本人用的Xcode8,路径为:

复制代码
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

其他版本的xcode,自己百度咯,反正都差不多。把我们需要的工具直接复制到桌面上来(方便用)。

3.4、.crash文件的分析

a.配置环境变量DEVELOPER_DIR,(配置好了就不再需要)

复制代码
export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer

b.新建一个文件夹,将第二步中获取的两个文件放在同一个文件夹中

注意:上面指的是其所在的路径。经过上面的简单几步我们就能得到格式化好的crash日志,这样就方便我们定位bug的位置了。
相关推荐
BBNbQKHXygfU1 小时前
课程管理平台 SSM 技术栈:Java EE、Mysql-5.6、Spring、SpringM...
iphone
win x2 小时前
深入理解HTTPS协议加密流程
网络协议·http·https
仙俊红3 小时前
从 Filter / Interceptor 到 HTTPS
网络协议·http·https
游戏开发爱好者83 小时前
日常开发与测试的 App 测试方法、查看设备状态、实时日志、应用数据
android·ios·小程序·https·uni-app·iphone·webview
王码码20353 小时前
Flutter for OpenHarmony 实战之基础组件:第三十一篇 Chip 系列组件 — 灵活的标签化交互
android·flutter·交互·harmonyos
黑码哥3 小时前
ViewHolder设计模式深度剖析:iOS开发者掌握Android列表性能优化的实战指南
android·ios·性能优化·跨平台开发·viewholder
亓才孓3 小时前
[JDBC]元数据
android
独行soc3 小时前
2026年渗透测试面试题总结-17(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
金融RPA机器人丨实在智能3 小时前
Android Studio开发App项目进入AI深水区:实在智能Agent引领无代码交互革命
android·人工智能·ai·android studio
科技块儿3 小时前
利用IP查询在智慧城市交通信号系统中的应用探索
android·tcp/ip·智慧城市