ios 捕抓crash_iOS Swift Crash的捕获

本文详细介绍了如何在iOS Swift应用中捕获和处理crash,包括NSException在Objective-C中的捕获、Swift中通过signal进行crash捕获,特别是SIGTRAP和SIGILL信号的处理。提供了实现代码示例,并提到了Swift崩溃的特定场景,如非可选类型的nil值和强制类型转换失败。建议开发者阅读参考以增强应用的稳定性。
摘要由CSDN通过智能技术生成

介绍如果对crash捕获不太了解,可以先参考这篇文章,本文进行Mach异常+Unix信号方式捕获crash。

NSException一般只在OC当中被捕获,一般情况下在捕获NSException异常后同时也会捕获到一个对应的signal异常。但如果你使用的是纯swift开发,如下代码并不会捕获相关的crashNSSetUncaughtExceptionHandler(UncaughtExceptionHandler)

swift崩溃捕获swift通常都是通过对应的signal来捕获crash。对于swift的崩溃捕获,Apple的文档中有描述说需要通过SIGTRAP信号捕获强转失败,及非可选的nil值导致的崩溃.具体描述如下:Trace Trap[EXC_BREAKPOINT // SIGTRAP]

类似于异常退出,此异常旨在使附加的调试器有机会在其执行中的特定点中断进程。您可以使用该__builtin_trap()函数从您自己的代码触发此异常。如果没有附加调试器,则该过程将终止并生成崩溃报告。

较低级的库(例如,libdispatch)会在遇到致命错误时捕获进程。有关错误的其他信息可以在崩溃报告的“ 附加诊断信息”部分或设备的控制台中找到。

如果在运行时遇到意外情况,Swift代码将以此异常类型终止,例如:

1.具有nil值的非可选类型

2.一个失败的强制类型转换对于swift还有一种崩溃需要捕获(Intel处理器,我认为应该是指在模拟器上的崩溃),为保险起见,也需要将信号SIGILL进行注册,Apple同样对其中做了描述Illegal Instruction[EXC_BAD_INSTRUCTION // SIGILL]

该过程尝试执行非法或未定义的指令。该过程可能尝试通过错误配置的函数指针跳转到无效地址。

在Intel处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值