iOS Crash log 分析
日志输出:
Incident Identifier: F68C10CC-EE66-4442-803F-465A386D319D
CrashReporter Key: 63be0bf5b77e2cd4539491a3e10a7339cfedc26f
Hardware Model: iPhone6,2
Process: Community10000v6 [9140]
Path: /private/var/containers/Bundle/Application/E4DA7363-CFEF-41B7-A199-7607935DD0F5/Community10000v6.app/Community10000v6
Identifier: cn.dxwt.Community10000
Version: 6019 (6.0.1)
Code Type: ARM-64 (Native)
Role: Unspecified
Parent Process: Exited process [9137]
Coalition: cn.dxwt.Community10000 [2047]
Date/Time: 2018-03-06 13:33:10.2770 +0800
Launch Time: 2018-03-06 13:30:16.5038 +0800
OS Version: iPhone OS 10.1.1 (14B100)
Report Version: 104
Exception Type: EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Triggered by Thread: 0
Filtered syslog:
None found
Thread 0 Crashed:
0 dyld 0x0000000100675cd8 __abort_with_payload + 8
1 dyld 0x0000000100675668 abort_with_payload_wrapper_internal + 100
2 dyld 0x00000001006756b0 fcntl + 0
3 dyld 0x0000000100654514 dyld::fastBindLazySymbol+ 17684 (ImageLoader**, unsigned long) + 0
4 dyld 0x00000001006569a8 dyld::_main+ 27048 (macho_header const*, unsigned long, int, char const**, char const**, char const**, unsigned long*) + 4072
5 dyld 0x0000000100651044 _dyld_start + 68
Thread 0 crashed with ARM Thread State (64-bit):
x0: 0x0000000000000006 x1: 0x0000000000000001 x2: 0x000000016fdca120 x3: 0x00000000000000a7
x4: 0x000000016fdc9d20 x5: 0x0000000000000000 x6: 0x0000000000000000 x7: 0x00000000000006d0
x8: 0x0000000000000020 x9: 0x0000000000000009 x10: 0x2f7070612e367630 x11: 0x726f77656d617246
x12: 0x6d616c412f736b72 x13: 0x72662e657269666f x14: 0x2f6b726f77656d61 x15: 0x7269666f6d616c41
x16: 0x0000000000000209 x17: 0x0000000000090000 x18: 0x0000000000000000 x19: 0x0000000000000000
x20: 0x000000016fdc9d20 x21: 0x00000000000000a7 x22: 0x000000016fdca120 x23: 0x0000000000000001
x24: 0x0000000000000006 x25: 0x0000000100681ab8 x26: 0x0000000000000000 x27: 0x58802996eaa800fa
x28: 0x0000000100681000 fp: 0x000000016fdc9cf0 lr: 0x0000000100675668
sp: 0x000000016fdc9cb0 pc: 0x0000000100675cd8 cpsr: 0x00000000
Binary Images:
0x100034000 - 0x1004d3fff Community10000v6 arm64 <eb4cf9d6551c37e489f6a2aaf66fc09e> /var/containers/Bundle/Application/E4DA7363-CFEF-41B7-A199-7607935DD0F5/Community10000v6.app/Community10000v6
0x100650000 - 0x10067ffff dyld arm64 <f5a894bbb0cc38b1930add2172007394> /usr/lib/dyld
0x191f12000 - 0x191f67fff libc++.1.dylib arm64 <ad5eb3d0e134370ab9ab52e3979ac239> /usr/lib/libc++.1.dylib
0x19286b000 - 0x19287bfff libz.1.dylib arm64 <a8ab1654147738bda28160886a3a5df1> /usr/lib/libz.1.dylib
0x193a42000 - 0x193b56fff libsqlite3.dylib arm64 <a54037ad22f1329998d318a227192323> /usr/lib/libsqlite3.dylib
0x1a4a21000 - 0x1a4a73fff libstdc++.6.dylib arm64 <eb4141a9e0e03542b9b7105dd065b2ac> /usr/lib/libstdc++.6.dylib
EOF
1. 设备信息
Incident Identifier: crash的ID
CrashReporter Key: crash 的设备ID
Hardware Model: 手机的型号 (iPhone6,2代表iPhone5s)
Process: App的名称 (该App的进程ID)
Path: APP 的位置 路径
Identifier: bundle ID
Version: APP的版本号
Code Type: app的应用架构
Date/Time: crash发生的时间
Launch Time: 进入应用的时间
OS Version: iOS系统的版本
如果产品上线之后, 回收集大量的Crash Log日志文件, 可以对Crash文件里面的手机型号,版本号, 手机型号, iOS系统版本,进行分类, 可以获得更多的信息, 更好的解决bug甚至未知的bug具体原因。
2.异常信息
Exception Type: EXC_CRASH (SIGABRT) 异常的类型
Exception Codes: 0x0000000000000000, 0x0000000000000000 异常出错的代码
Exception Note: EXC_CORPSE_NOTIFY // 异常通知
Triggered by Thread: 0 // 异常发生的线程(0代表主线程, 其他为主线程)
常见的Exception Codes代码类型
Exception Codes: 常见代码有以下几种
0x8badf00d错误码:Watchdog超时,意为“ate bad food”。
0xdeadfa11错误码:用户强制退出,意为“dead fall”。
0xbaaaaaad错误码:用户按住Home键和音量键,获取当前内存状态,不代表崩溃。
0xbad22222错误码:VoIP应用(因为太频繁?)被iOS干掉。
0xc00010ff错误码:因为太烫了被干掉,意为“cool off”。
0xdead10cc错误码:因为在后台时仍然占据系统资源(比如通讯录)被干掉,意为“dead lock”
常见的Exception Type异常类型的信息:
1.EXC_BAD_ACCESS
此类型是最常见的crash, 通常用于访问了不该访问的内存导致的,一般 EXC_BAD_ACCESS后面的()还会带有补充信息
SIGSEGV:通常由于重复释放对象导致, 一般在ARC以后很少见到
SIGABRT: 收到Abort信号退出, 通常Foundtion库中的容器为了保护状态正常会做一些检测, 例如插入nil到数据中等会遇到此类错误.
野指针错误形式在Xcode中通常表现为:Thread 1:EXC_BAD_ACCESS(code=EXC_I386_GPFLT)错误。因为你访问了一块已经不属于你的内存。
SEGV(Segmentation Violation): 代表无效内存地址, 比如空指针, 未初始化指针, 栈溢出等.
SIGBUS:总栈错误, 与SIGSEGV不同的是,SIGSEGV访问的是无效的地址, 而SIGBUS访问的是有效的地址, 但是总栈访问异常(如地址对齐问题)
SIGILL: 尝试执行非法的指令, 可能不被识别或者没有权限
SIGFPE: 数学计算相关问题, 比如除零操作
SIGIPIPE: 管道另一端没有进程接手数据
2. EXC_BAD_INSTRUCTION
此类异常通常由于线程执行非法指令导致
3. EXC_ARITHMETIC
除零错误会抛出此类异常
3.回溯(Backtrace)
这部分列出了发生Crash时线程的调用栈,一般根据这个代码就能找到具体的crash问题。
Thread 0 Crashed:
...
4.线程状态(Thread State)
这部分列出了发生Crash的线程的状态,即寄存器和寄存器的值。
Thread 0 crashed with ARM Thread State (64-bit):
...
5.二进制映像(Binary Images)
这部分列出了当Crash发生时被装载进进程内存空间的依赖库或者模块。
Binary Images:
...