iOS 崩溃日志排查

崩溃日志

*.ips文件是从手机上导出来的,在手机里找到设置->隐私->分析→分析数据;文件名格式就是APP包名+时间的ips文件;

初步排查

1.把崩溃日志文件的后缀ips改为crash,可以双击打开xcode查看异常堆栈;
2.有崩溃发生的手机时,可以直接拿手机过来连接mac,在xcode顶部菜单选择【Window】→ [Devices And Simulators],点击View Device Logs按钮查看设备日志;
找到对应app的崩溃日志,在右侧可以查看崩溃的具体堆栈(点击某一条日志,右侧加载具体堆栈有延迟);

结合dSYM文件排查

借助的工具:symbolicatecrash(xcode自带的崩溃分析工具)
symbolicatecrash工具路径
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash

步骤

1.创建一个目录,用于放置需要的文件,如/Users/mymac/Documents/crash,app名称举例=appname;把symbolicatecrash拷贝到crash文件夹中;
2.拷贝相关文件到crash文件夹中,包括下面的文件
2.1重命名后的崩溃日志.crash
2.2对应打包生成的appname.xcarchive,右键显示包内容,拷贝dSYMs\*.dSYM文件,拷贝Products\Applications\appname.app;

3.核对三个UUID是否一致,确保崩溃日志、app、dSYM文件能对应上,注意UUID根据手机cpu架构不同会有多个;

崩溃日志的UUID

.crash文件内第一行slice_uuid 就是该 crash 文件的 UUID,结合Code Type: ARM-64 (Native),定位到arm64的UUID
例如

{
    "app_name": "appname",
    "timestamp": "2017-06-03 02:15:01.50 +0800",
    "app_version": "1.2.00",
    "slice_uuid": "ab0ec401-77b7-3ff6-bf99-567fa14a45fc",
    "adam_id": 1128617051,
    "build_version": "1.0.1",
    "share_with_app_devs": false,
    "is_first_party": false,
    "bug_type": "109",
    "os_version": "iPhone OS 10.3.2 (14F89)",
    "incident_id": "1DE9E3EF-D2DF-4A54-992A-1912BF8D285A",
    "name": "appname"
}
Incident Identifier: 1DE9E3EF-D2DF-4A54-992A-1912BF8D285A
CrashReporter Key:   5abb1af3a567bd61ac640b7daf57c472c59d9547
Hardware Model:      xxx
Version:             1.0.1 (1.2.00)
Code Type:           ARM-64 (Native)
Role:                Foreground
Parent Process:      launchd [1]

或者通过命令获取crash文件appname-2020-04-04-239165.crash的UUID:grep --after-context=2 "Binary Images:" appname-2020-04-04-239165.crash

app、dSYM的UUID获取

打开终端,cd /Users/username/Documents/crash

app的UUID

dwarfdump --uuid appname.app/appname

UUID: CD78BB00-BE55-3FC2-89AC-580437E54D36 (armv7) appname.app/appname
UUID: AB0EC401-77B7-3FF6-BF99-567FA14A45FC (arm64) appname.app/appname

dSYM的UUID

dwarfdump --uuid appname.app.dSYM

UUID: CD78BB00-BE55-3FC2-89AC-580437E54D36 (armv7) + 很长的路径
UUID: AB0EC401-77B7-3FF6-BF99-567FA14A45FC (arm64) + 很长的路径

4.开始解析

终端输入:
./symbolicatecrash appname-2020-04-04-239165.crash appname.app.dSYM > log.crash

生成文件log.crash,再双击打开在xcode中查看异常堆栈;
如果执行后提示错误,如
Error: "DEVELOPER_DIR" is not defined at ./symbolicatecrash line 69.

执行以下命令:
export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
再执行解析命令即可。

5.其他问题
解析dSYM文件UUID失败
原因:dSYM文件实际上是一个文件夹,从服务器上直接下载这个文件夹到本地,可能破坏了*.dSYM文件;
解决:通过在服务器上对appname.xcarchive目录整个压缩后,再下载到mac上,再解析UUID正常;

你可能感兴趣的:(iOS 崩溃日志排查)