iOS崩溃日志的处理

在处理iOS崩溃日志之前我们先来了解一下崩溃日志里面的一些东西:

第一部分:进程信息

Incident Identifier: D48383A7-0EA6-48C1-B623-4D798CEXXXXX
CrashReporter Key:   81f2c9c2093808a1832227d2b146164108f2bxxx
Hardware Model:      iPhone8,2
Process:             guizhouXXX [3388]
Path:                /private/var/containers/Bundle/Application/F3D1AE65-1EFB-423C-AE12-E6DC3FA88XXX/guizhouXXX.app/guizhouXXX
Identifier:          com.XXX.XXXXX
Version:             1 (1.1.5)
Code Type:           ARM-64 (Native)
Role:                Non UI
Parent Process:      launchd [1]
Coalition:           com.XXX.XXXXX [949]
Incident Identifier:崩溃日志的唯一标识
CrashReporter Key:与设备标识相对应的唯一键值。
Hardware Model:设备类型
Process:             guizhouXXX [3388]:应用名称[闪退时的进程ID]
第二部分:基本信息

Date/Time:           2016-09-30 11:40:14.5463 +0800
Launch Time:         2016-09-29 18:03:33.8821 +0800
OS Version:          iPhone OS 10.0.1 (14A403)
Report Version:      104
第二部分的信息不用多说,大家应该都能看懂

第三部分:异常信息,这一部分比较重要,这一部分告诉你崩溃的类型,以及崩溃的线程、异常编码等...

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note:  EXC_CORPSE_NOTIFY
Triggered by Thread:  0
第四部分:进程信息,以及崩溃的进程
Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_kernel.dylib        	0x00000001919b2014 0x191993000 + 126996
1   libsystem_pthread.dylib       	0x0000000191a79460 0x191a74000 + 21600
2   libsystem_c.dylib             	0x00000001919263f4 0x1918c3000 + 406516
3   libc++abi.dylib               	0x00000001913f12d4 0x1913f0000 + 4820
4   libc++abi.dylib               	0x000000019140ecc0 0x1913f0000 + 126144
5   libobjc.A.dylib               	0x000000019141c844 0x191414000 + 34884
6   libc++abi.dylib               	0x000000019140b66c 0x1913f0000 + 112236
7   libc++abi.dylib               	0x000000019140b234 0x1913f0000 + 111156
8   libobjc.A.dylib               	0x000000019141c71c 0x191414000 + 34588
9   CoreFoundation                	0x00000001928be0bc 0x1928b5000 + 37052
10  GraphicsServices              	0x0000000194341198 0x194335000 + 49560
11  UIKit                         	0x0000000198897818 0x19881d000 + 501784
12  UIKit                         	0x0000000198892550 0x19881d000 + 480592
13  guizhouXXX                    	0x00000001000e5134 0x100038000 + 708916
14  libdyld.dylib                 	0x00000001918a05b8 0x19189c000 + 17848

Thread 1 name:  com.apple.uikit.eventfetch-thread
Thread 1:
0   libsystem_kernel.dylib        	0x000000019199416c 0x191993000 + 4460
1   libsystem_kernel.dylib        	0x0000000191993fdc 0x191993000 + 4060
2   CoreFoundation                	0x0000000192991cec 0x1928b5000 + 904428
3   CoreFoundation                	0x000000019298f908 0x1928b5000 + 895240
4   CoreFoundation                	0x00000001928be048 0x1928b5000 + 36936
5   Foundation                    	0x00000001933ccb1c 0x1933c0000 + 51996
6   Foundation                    	0x00000001933ed60c 0x1933c0000 + 185868
7   UIKit                         	0x000000019920ce6c 0x19881d000 + 10419820
8   Foundation                    	0x00000001934ca50c 0x1933c0000 + 1090828
9   libsystem_pthread.dylib       	0x0000000191a77860 0x191a74000 + 14432
10  libsystem_pthread.dylib       	0x0000000191a77770 0x191a74000 + 14192
11  libsystem_pthread.dylib       	0x0000000191a74dbc 0x191a74000 + 3516

从进程信息中我们可以明确的看到是那一个进程崩溃了,以及崩溃的时候加载了那些库,

看了这些崩溃信息我们并不知道是崩溃在哪一个文件的那一行代码,下面介绍如何处理崩溃日志。

一、首先我们需要找到和崩溃日志相对应的dSYM文件,这个文件很好找,一行代码解决

cd ~/Library/Developer/Xcode/Archives/yyyy-mm-dd/appname.xcarchive/dSYMs/appname.app.dSYM/Contents/Resources/DWARF
然后在当前文件下执行

atos -arch arm64 -o guizhouXXX  0x00000001000e5134

这里需要讲解一下这是使用arm64还是arm7在第一部分我们就可以看到CPU对应的是arm64就是用arm64,是arm7就使用arm7,地址就是崩溃线程应用名称对应的地址,

执行过后就能获取到是哪一个文件的那一行出现 崩溃,一般在处理崩溃日志之前我们需要查看一下崩溃日志的Incident Identifier是否和dSYM的UUID是否相同,

二、如何查看dSYM的UUID

dwarfdump --uuid xx.app.dSYM,执行这段代码就能得到UUID一般会等到两个UUID这两个UUID分别是arm64和arm7的。

你可能感兴趣的:(iOS开发过程中的一些问题)