降本增效工具系列(二):IOS 系统 Crash 日志分析实战_crash日志(1)

分享

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

Date/Time: 2021-08-31 09:13:53.8890 +0800 //Crash发生的时间
Launch Time: 2021-08-31 09:13:18.1164 +0800 //系统登陆时间
OS Version: iPhone OS 14.6 (18F72) //系统版本,括号内的数字代表的时Bulid号
Release Type: User
Baseband Version: 6.71.01
Report Version: 104

Exception Type: EXC_CRASH (SIGABRT) //异常类型
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Triggered by Thread: 21

Application Specific Information:
abort() called

Thread 21 name: Dispatch queue: com.facebook.react.ShadowQueue
Thread 21 Crashed:
//编号 二进制库名 调用方法的地址 基本地址 + 偏移
0 libsystem_kernel.dylib 0x00000001d73517b0 0x1d732a000 + 161712
1 libsystem_pthread.dylib 0x00000001f39dc9c0 0x1f39d2000 + 43456
2 libsystem_c.dylib 0x00000001b4243a44 0x1b41d0000 + 473668
3 mrcs 0x0000000102dd4e18 0x102c08000 + 1887768
4 mrcs 0x0000000102dd4d9c 0x102c08000 + 1887644
5 mrcs 0x0000000102ddd034 0x102c08000 + 1921076
6 mrcs 0x0000000102ddd0d0 0x102c08000 + 1921232
7 mrcs 0x0000000102ddd0d0 0x102c08000 + 1921232
8 mrcs 0x0000000102ddd0d0 0x102c08000 + 1921232
9 mrcs 0x0000000102ddd0d0 0x102c08000 + 1921232
10 mrcs 0x0000000102ddd0d0 0x102c08000 + 1921232
11 mrcs 0x0000000102dda324 0x102c08000 + 1909540
12 mrcs 0x0000000102dd8908 0x102c08000 + 1902856
13 mrcs 0x0000000102ddda4c 0x102c08000 + 1923660
14 mrcs 0x0000000102dd96e8 0x102c08000 + 1906408
15 mrcs 0x0000000102dd8908 0x102c08000 + 1902856
16 mrcs 0x0000000102ddda4c 0x102c08000 + 1923660
17 mrcs 0x0000000102dd96e8 0x102c08000 + 1906408
18 mrcs 0x0000000102dd8908 0x102c08000 + 1902856
19 mrcs 0x0000000102ddda4c 0x102c08000 + 1923660
20 mrcs 0x0000000102dd96e8 0x102c08000 + 1906408
21 mrcs 0x0000000102dd8908 0x102c08000 + 1902856
22 mrcs 0x0000000102dddf38 0x102c08000 + 1924920
23 mrcs 0x0000000102dd9e14 0x102c08000 + 1908244
24 mrcs 0x0000000102dd8908 0x102c08000 + 1902856
25 mrcs 0x0000000102ddb598 0x102c08000 + 1914264
26 mrcs 0x0000000102dd8908 0x102c08000 + 1902856
27 mrcs 0x0000000102dda940 0x102c08000 + 1911104
28 mrcs 0x0000000102dd8908 0x102c08000 + 1902856
29 mrcs 0x0000000102dda940 0x102c08000 + 1911104
30 mrcs 0x0000000102dd8908 0x102c08000 + 1902856
31 mrcs 0x0000000102ddb598 0x102c08000 + 1914264
32 mrcs 0x0000000102dd8908 0x102c08000 + 1902856
33 mrcs 0x0000000102dda940 0x102c08000 + 1911104
34 mrcs 0x0000000102dd8908 0x102c08000 + 1902856
35 mrcs 0x0000000102dda940 0x102c08000 + 1911104
36 mrcs 0x0000000102dd8908 0x102c08000 + 1902856
37 mrcs 0x0000000102dda940 0x102c08000 + 1911104
38 mrcs 0x0000000102dd8908 0x102c08000 + 1902856
39 mrcs 0x0000000102dda940 0x102c08000 + 1911104
40 mrcs 0x0000000102dd8908 0x102c08000 + 1902856
41 mrcs 0x0000000102ddb598 0x102c08000 + 1914264
42 mrcs 0x0000000102dd8908 0x102c08000 + 1902856
43 mrcs 0x0000000102dda940 0x102c08000 + 1911104
44 mrcs 0x0000000102dd8908 0x102c08000 + 1902856
45 mrcs 0x0000000102dda940 0x102c08000 + 1911104
46 mrcs 0x0000000102dd8908 0x102c08000 + 1902856
47 mrcs 0x0000000102dda940 0x102c08000 + 1911104
48 mrcs 0x0000000102dd8908 0x102c08000 + 1902856
49 mrcs 0x0000000102dda940 0x102c08000 + 1911104
50 mrcs 0x0000000102dd8908 0x102c08000 + 1902856
51 mrcs 0x0000000102dda940 0x102c08000 + 1911104
52 mrcs 0x0000000102dd8908 0x102c08000 + 1902856
53 mrcs 0x0000000102ddc09c 0x102c08000 + 1917084
54 mrcs 0x0000000102cfe104 0x102c08000 + 1007876
55 mrcs 0x0000000102cf2e10 0x102c08000 + 962064
56 mrcs 0x0000000102d0b800 0x102c08000 + 1062912
57 mrcs 0x0000000102d0f860 0x102c08000 + 1079392
58 mrcs 0x0000000102cd0efc 0x102c08000 + 823036
59 libdispatch.dylib 0x00000001ab2562b0 0x1ab1f6000 + 393904
60 libdispatch.dylib 0x00000001ab257298 0x1ab1f6000 + 397976
61 libdispatch.dylib 0x00000001ab233344 0x1ab1f6000 + 250692
62 libdispatch.dylib 0x00000001ab233e2c 0x1ab1f6000 + 253484
63 libdispatch.dylib 0x00000001ab23d66c 0x1ab1f6000 + 292460
64 libsystem_pthread.dylib 0x00000001f39dd5bc 0x1f39d2000 + 46524
65 libsystem_pthread.dylib 0x00000001f39e086c 0x1f39d2000 + 59500
Thread 22:
0 libsystem_pthread.dylib 0x00000001f39e0864 0x1f39d2000 + 59492
//Crash时发生时刻,线程的状态(寄存器中的值)
Thread 21 crashed with ARM Thread State (64-bit):
x0: 0x0000000000000000 x1: 0x0000000000000000 x2: 0x0000000000000000 x3: 0x0000000000000000
x4: 0x000000010378c20c x5: 0x000000016dc98930 x6: 0x000000000000000a x7: 0x0000000102dd7248
x8: 0x000000016dc9f000 x9: 0xef6382e5d8fc5092 x10: 0x0000000000000002 x11: 0x00000000fffffffd
x12: 0x0000010000000000 x13: 0x0000000000000000 x14: 0x0000000000000000 x15: 0x0000000000000000
x16: 0x0000000000000148 x17: 0x0000000000000002 x18: 0x0000000000000000 x19: 0x0000000000000006
x20: 0x0000000000006e4b x21: 0x000000016dc9f0e0 x22: 0x0000000000000000 x23: 0x0000000144f1ff80
x24: 0x0000000000000002 x25: 0x0000000000000000 x26: 0x0000000000000002 x27: 0x0000000000000000
x28: 0x0000000000000001 fp: 0x000000016dc98880 lr: 0x00000001f39dc9c0
sp: 0x000000016dc98860 pc: 0x00000001d73517b0 cpsr: 0x40000000
esr: 0x56000080 Address size fault
//Crash时刻App加载的所有库,其中第一行是Crash发生时我们App可执行文件的信息,可以看出为arm64,可执行文件包的uuid为c0f……cd65,解析Crash的时候dsym文件的uuid必须和这个一样才能完成Crash的符号化解析。
Binary Images:
0x102c08000 - 0x103933fff mrcs arm64 <85fda4ca6eae360091c86fa83b827d7a> /var/containers/Bundle/Application/A09D22A5-324F-4686-964B-51AE831927B7/mrcs.app/mrcs
0x103d60000 - 0x103dcbfff dyld arm64 /usr/lib/dyld

EOF


由以上崩溃报告内容可知,`Thread *` 表示发生`Crash`的线程调用栈,从上到下分别代表调用顺序,最上面的一个表示抛出异常的位置,依次往下可以看到`API`的调用顺序。重点由以下内容定位Crash异常类型、错误码、导致异常发生的线程。



Exception Type: EXC_CRASH (SIGABRT) //异常类型
Exception Codes: 0x0000000000000000, 0x0000000000000000 //异常类型代码
Exception Note: EXC_CORPSE_NOTIFY
Triggered by Thread: 21


有以上可知,线程21导致应用崩溃问题产生。


注意⚠️:包含堆栈跟踪的崩溃报告需要先进行符号化(`symbolicated`)才可以进行分析。符号化的过程是将内存地址替换为便于阅读的函数名称和行号。如果通过`Xcode`的`Organizer`窗口获取崩溃日志,那么该报告将在几秒钟后自动进行符号化。否则需要将`.crash`文件导入到`Xcode`的`Organizer`进行符号化。


### 三、常见 Exception Type



> 
> * `EXC_BAD_ACCESS` 通常由于访问了不该访问的内存导致。一般`EXC_BAD_ACCESS`后面的"()"还会带有补充信息。
> * `SIGSEGV`: 通常由于重复释放对象导致,这种类型在切换`ARC`之后已经很少见到。当我们收到 SIGSEGV 信号时,可以往以下几个方面考虑:
> 
> 
> 1. 访问无效内存地址,比如访问Zombie对象;
> 2. 尝试往只读区域写数据;
> 3. 引用空指针;
> 4. 使用未初始化的指针;
> 5. 栈溢出;
> 
> 
> * `SIGABRT`: 收到`Abort`信号退出,通常`Foundation`库中的容器为了保护状态正常会做一些检测,例如插入`null`到数组中等会遇到此类错误。
> * `SEGV`:(`Segmentation Violation`),代表无效内存地址,比如空指针,未初始化指针,栈溢出等;
> * `SIGBUS`:总线错误,与 `SIGSEGV` 不同的是,`SIGSEGV` 访问的是无效地址,而 `SIGBUS` 访问的是有效地址,但总线访问异常(如地址对齐问题);
> * `SIGILL`:尝试执行非法指令,可能不被识别或者没有权限;
> * `EXC_BAD_INSTRUCTION`,此类异常通常由于线程执行非法指令导致;
> * `EXC_ARITHMETIC`,除零错误会抛出此类异常;


### 最后

正值招聘旺季,很多小伙伴都询问我有没有前端方面的面试题!

**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/topics/618166371)**

![前端资料图.PNG](https://img-blog.csdnimg.cn/img_convert/1921d865e522c0157b85a8c8e885c633.webp?x-oss-process=image/format,png)

后

正值招聘旺季,很多小伙伴都询问我有没有前端方面的面试题!

**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/topics/618166371)**

[外链图片转存中...(img-MOWjf7Bp-1715278284551)]

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值