深入iOS系统底层之crash解决方法介绍:崩溃栈

本文深入探讨了iOS应用程序中出现的`objc_msgSend+16`崩溃问题,分析了崩溃栈信息,指出异常通常发生在`objc_msgSend`函数的第5条指令。通过查看汇编代码,确定崩溃原因是释放后的对象被调用实例方法,导致EXC_BAD_ACCESS。文章还介绍了多种崩溃分析定位方法,包括查看开源代码、设置符号断点、手动重现和使用第三方工具静态分析,帮助开发者解决这类问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

众里寻他千百度,蓦然回首,那人却在灯火阑珊处。–《青玉案·元夕》

要学会看crash崩溃和报告

一个应用程序并不总会一直运行的很好,它总会有出现crash崩溃的情况。如果在应用程序中接入了一些第三方的crash收集工具或者自建crash收集报告平台的话将会很好的帮助开发者去分析和解决应用程序在线上运行的问题,当出现的崩溃问题能得到及时的解决和快速的修复时必将会大大的提升应用程序的用户体验。

当前比较流行的crash收集分析工具很多都是基于开源的KSCrash代码来进行封装和改进的。苹果自身也构建了一套crash采集和分析的机制,你可以从真机的联机日志或者从开发者账号中去查看对应的crash信息。网络上也有很多关于crash分析的文章,以及crash堆栈符号化处理的文章。这里假定你已经了解了一些查看crash报告的方法和技巧以及一些简单的crash分析技巧,因为这些是作为开发者需要具备的技能之一。

一个objc_msgSend+16崩溃栈

应用程序出现的crash崩溃异常有一些能够简单的被分析和解决,往往这些crash崩溃异常都会带有明确的上下文信息和函数调用层级堆栈。但并不是所有的crash崩溃异常都能被简单的解决,尤其是那些没有明确上下文信息的函数调用堆栈或者那些调用堆栈中没有一个函数或者方法能够被直接定位到源代码的场景,就如下面这个崩溃的函数调用栈(部分信息):

Incident Identifier: 85BE3461-D7FD-4043-A4B9-1C0D9A33F63DCrashReporter Key:   9ec5a1d3b8d5190024476c7068faa58d8db0371fHardware Model:      iPhone7,2Code Type:       ARM-64Parent Process:  ? [1]Date/Time:       2018-08-06 16:36:58.000 +0800OS Version:      iOS 10.3.3 (14G60)Report Version:  104Exception Type:  EXC_BAD_ACCESS (SIGBUS)Exception Codes: 0x00000000 at 0x00000005710bbeb8Crashed Thread:  2Thread 2 name:  WebThread Thread 2 Crashed:0   libobjc.A.dylib                 objc_msgSend + 161   UIKit                           -[UIWebDocumentView _updateSubviewCaches] + 402   UIKit                           -[UIWebDocumentView subviews] + 923   UIKit                           -[UIView(CALayerDelegate) _wantsReapplicationOfAutoLayoutWithLayoutDirtyOnEntry:] + 724   UIKit                           -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 12565   QuartzCore                      -[CALayer layoutSublayers] + 1486   QuartzCore                      CA::Layer::layout_if_needed(CA::Transaction*) + 2927   QuartzCore                      CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 328   QuartzCore                      CA::Context::commit_transaction(CA::Transaction*) + 2529   QuartzCore                      CA::Transaction::commit() + 50410  QuartzCore                      CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值