iOS崩溃排查

本文最后更新于:2 年前

一、记录崩溃日志

1、连接设备,直接通过Xcode获取

在菜单栏找到Devices and Simulators,找到View Device Logs,根据日期包名等信息即可以找到对应的闪退日志,稍等一段时间后,Xcode会自动将日志符号化,此处日志导出后,会生成对应的.crash格式的崩溃日志

2、设备中提取

iPhone设置里面,依次找到隐私-分析-分析数据,此处会记录设备上所有的日志,同样找到相应的日志,点击后可以复制出来,但此处日志没有经过符号化,还需要再进行符号化才能看懂

3、代码中系统方法记录

1
FOUNDATION_EXPORT void NSSetUncaughtExceptionHandler(NSUncaughtExceptionHandler * _Nullable);

在代码中使用系统提供的API记录日志后,再通过网络上传,这样就能统计到所有设备上的崩溃日志了

4、第三方库KSCrash

相比系统方法,有些第三方库的日志记录更为精确,例如KSCrash

二、.crash符号化

1、dSYM符号文件

dSYM文件是指具有调试信息的目标文件,每次打包时Xcode菜单栏中Organizer下回生成Archives记录,右键Show in Finder可以找到对应的.xcarchive文件,在该文件包内容中可以找到dSYMs文件夹,里面包含dSYM文件,如果没有,需要检查Xcode相关的打包配置参数

2、 找到Xcodesymbolicatecrash脚本

在终端中输入命令

1
$ find /Applications/Xcode.app -name symbolicatecrash -type f

其中Xcode.app的路径请以本机路径为准,一段时间后,即可以找到几个symbolicatecrash脚本,拷贝其中一个脚本即可

3、校验uuid

查看dSYM文件的uuid

1
$ xcrun dwarfdump --uuid xx/xx/.dSYM

查看appuuid

1
$ xcrun dwarfdump --uuid xx/xx/.app

查看crash文件的uuid,在crash文件中找到Binary Images,其下面的第一行类似于下面代码,尖括号中的就是uuid

1
0x1021d4000 -        0x103d97fff +name arm64  <574a9bf6c9133dd28f0238271676b1aa> /private/var/containers/Bundle/Application/F2986301-7085-4018-A6DD-64AB69F95AA2/name.app/name

4、符号化

symbolicatecrash脚本、dSYM文件、.app.crash文件放在一起,要先确保三个文件为同一个app打包产生的,使用如下命令行即可符号化

1
$ xx/xx/symbolicatecrash xx/xx/.crash xx/xx/.dSYM > xx/xx/.log

如果出现报错,则需要重置下环境变量

1
$ export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer

三、dSYMTools

github有做成mac app的工程,可以直接使用