1、手动捕捉crash 即使有了bugly,也需要知道奔溃是如何捕捉的。 注意:自定义NSSetUncaughtExceptionHandler之后,会导致bugly失效,需要注意!!...//crash奔溃的处理 exception_init(); } void exception_init(void) { // _objc_terminate是一个函数指针...old_terminate = std::set_terminate(&_objc_terminate); } //系统出现crash都会来到这个函数 static void _objc_terminate
用户在使用App的过程中,经常遇到闪退的情况,体验不太好,本文尝试探索引发闪退的原因,以及在遇到crash的情况下,尽可能的保持程序运行,并及时上报错误。...一、crash类型 1.OC层面的crash 1.1 普通类型 NSInvalidArgumentException:非法参数异常,传入非法参数导致异常,nil参数比较常见。...2.Signal层面的crash 除了OC层面的异常捕获之外,很多内存错误、访问错误的地址产生的crash则需要利用unix标准的signal机制,注册SIGABRT, SIGBUS, SIGSEGV等信号发生时的处理函数...二、存在问题 程序闪退,用户体验不好 三、监听crash 1.任凭程序闪退并上报 1.1 NSSetUncaughtExceptionHandler 捕获OC层面的crash 参考文章 (1)AppDelegate...自动修复+捕获上报 2.1 针对普通类型Crash的处理机制 hook相关的方法,增加保护机制。
背景 分享一些过去两个月遇到的crash。...根据堆栈信息和日志信息,可以找到用户操作路径,是通过scheme进入分类; 但是直接用真机复现,相同的操作并不会导致crash; 通过分析crash出现的机型和系统特征,发现都是iOS 13以下系统...,而刚刚尝试的是iOS 13的真机; 于是用iOS 12模拟器尝试同样的路径,可以成功复现。...寻找复现路径的时候,要尽量从两个方向去复现: 1、用户设备条件,包括iOS系统版本、iphone机型、网络环境等要保持一致; 2、App运行上下文,包括App版本、操作路径、运行环境等; 2、HTML...但是使用不当的时候,weak指针也很容易造成crash,如下图: ?
新机型的发布又会让适配相关的同学忙上一阵子啦,并且iOS Crash的问题始终伴随着移动开发者。本文将从三个阶段,由浅入深的介绍如何看懂并分析一篇crash报告,一起身临其境去读懂它吧。...获取Crash Report和Low Memory Report 如何调试已经部署好的iOS Apps讨论了如何从一个iOS设备直接拿到crash report和low memory report。...· 发生crash时app所依赖的OS的符号表信息。这些符号表包含了特定OS版本 (例如iOS9.3.3)上的framework所需调试信息。...SIGQUIT不代表进程发生Crash了,但是它确实反映了某种不合理的行为。 iOS中,如果占用了太长时间,键盘扩展程序会随着宿主app被干掉。...一旦app进入挂起状态,被iOS在任何时间终止掉都是合理的,因此这时候不会生成crash report。
新机型的发布又会让适配相关的同学忙上一阵子啦,并且iOS Crash的问题始终伴随着移动开发者。本文将从三个阶段,由浅入深的介绍如何看懂并分析一篇crash报告,一起身临其境去读懂它吧。...获取Crash Report和Low Memory Report 如何调试已经部署好的iOS Apps讨论了如何从一个iOS设备直接拿到crash report和low memory report。...[ 相同堆栈信息下的不同程度的符号化 ] 用Xcode符号化iOS的Crash report 一般来说,Xcode会自动尝试符号化它所有的Crash report。...· 发生crash时app所依赖的OS的符号表信息。这些符号表包含了特定OS版本 (例如iOS9.3.3)上的framework所需调试信息。...一旦app进入挂起状态,被iOS在任何时间终止掉都是合理的,因此这时候不会生成crash report。
EXC_CRASH(SIGABRT) 表示进程收到 SIGABRT 信号而终止,通常此信号是因为进程调用了 abort()函数。 如应用程序遇到了未捕获的 OC 或 C++ 的语言异常。 3.1....EXC_CRASH(SIGKILL) 操作系统终止了该进程,报告中的 Termination Reason 带有解释崩溃原因的代码。...有关使程序更高效运行,可参阅iOS Performance and Power Optimization with Instruments ---- 0xdead10cc 死锁 (dead lock)...EXC_CRASH(SIGQUIT) 应另一个进程的请求而终止 EXC_CRASH (信号退出) 表示进程应另一个有权管理其生命周期的进程的请求而终止。...如果 iOS 和 iPadOS 键盘扩展加载时间过长,主应用程序会终止键盘扩展。尽管与 watchdog 的异常信息不同,可参考:2.4.1. 0x8badf00d watchdog ---- 6.
去年,网易杭州研究院曾经针对 crash 的防护有提出『大白健康系统--iOS APP 运行时 Crash 自动修复系统』方案,使得 crash 防护这个想法真正被落实,但至今该方案的具体实现并没有被开源...友情提示,阅读本文前需对网易『大白健康系统--iOS APP 运行时 Crash 自动修复系统』一文有所了解,该文中已有的实现方案,本文不会再花更多笔墨进行赘述。...对于我们 iOS 应用层的 App,可简单总结为应用执行了某些不被允许的操作触发了系统抛出异常信号但又没有处理这些异常信号从而被杀掉的现象,比如常见的闪退(crash to desktop)。...: iOS/OSX 在被抛出异常后,被认为是不可恢复的,如果我们强行恢复 Runloop,整个 App 的不确定性将会更大,crash 的部分可能会再次发生; 内核抛出的异常一般都是较严重的底层硬件问题...这其实是 iOS 系统在 ARC 下的一个坑,ARC 导致了 over-released 的 crash,暂时没有其他更好的解决方案,只能把这部分防护改为 MRC 编写。
文章发布后我才发现,这并不是针对iOS Crash report唯一的翻译版本。哪篇翻译的更好这个见仁见智,但我希望这篇是翻译的最用心的版本。...获取Crash Report和Low Memory Report 如何调试已经部署好的iOS Apps讨论了如何从一个iOS设备直接拿到crash report和low memory report。...图3 相同堆栈信息下的不同程度的符号化 用Xcode符号化iOS的Crash report 一般来说,Xcode会自动尝试符号化它所有的Crash report。...发生crash时app所依赖的OS的符号表信息。这些符号表包含了特定OS版本(例如iOS9.3.3)上的framework所需调试信息。...一旦app进入挂起状态,被iOS在任何时间终止掉都是合理的,因此这时候不会生成crash report。
摘要 在 iOS 11 Beta 刚刚发布时,有用户在微博反馈:升级到 iOS 11 Beta 后,微信读书 App 遇到启动必 crash 的绝境,无法使用。...用户看到的界面,是我们开源的 iOS 启动连续闪退保护方案 提示。 调试发现,是一段 iOS 11 不兼容的代码引发的问题。我们通过修改不兼容代码,解决了问题。...我们设计了一个特征值以判断这个问题,并扩展了 iOS 启动连续闪退保护方案,提供了日志上报接口,帮助开发者在第一时间发现启动必 crash 问题。...启动必 crash 判断 如果特征值为:0|0|0|0…,用户遇到了启动必 crash 的问题,且 crash 堆栈一致。...开发者接入 开发者在 iOS 项目引入 GYBootingProtection 组件后, AppDelegate+GYBootingProtection.m ,插入一行上报代码,即可把启动必 crash
这篇文章讲到的Crash Log是Apple提供的。...然后,等待XCode拷贝Crash Log,在右上角可以通过App的名字搜索,比如这里我搜索的是微信,可以右键导出Crash Log到本地来分析: ?...分析 用于Demo的是一个微信的Crash Log: WeChat-2018-6-11-21-54.crash 设备信息:iPhone 7,iOS 12 beta1 版本信息:微信 6.6.7.32 (...crash的呢?...这种Crash在iOS底层的框架中经常出现,最常见的是GCD,比如dispatch_group Crashed: com.apple.main-thread 0 libdispatch.dylib
版本为iOS 13版本。...用iOS 12设备找到复现路径: 先正常触发UICollectionView的初始化和cell加载 => 从UICollectionView触发界面跳转,进入下一级界面 => 触发删除Cell的业务逻辑...问题延伸 为什么iOS 13以上没有crash?...这是UICollectionView内部对动画前后的数量校验,iOS 12及以下的系统会有NSAssert的断言触发;iOS 13开始没有NSAssert,但是同样会有异常Log。...UICollectionView为什么会有这个crash?
简介 可用通过xcrun simctl 和ios-sim来查看和管理iOS模拟器 xcrun simctl是Xcode自带的,ios-sim可用通过以下指令安装 npm install ios-sim...启动指定设备名称的模拟器 xcrun instruments -w "iPhone 7 (12.1)" 4....启动指定udid的模拟器 xcrun simctl boot E66A26DD-2063-4FBE-9AE8-9E82C4A251FF 执行boot后,如果遇到模拟器没有打开可以再执行以下指令, 像下面这样...关闭所有打开的模拟器 xcrun simctl shutdown all 7.重置模拟器(清除模拟器的数据和设置) xcrun simctl erase E66A26DD-2063-4FBE-9AE8-...9E82C4A251FF 注意重置前需求先关闭模拟器 8.
在iOS开发过程中一直都是使用模拟器进行调试,在模拟器上有很多不适应的地方,但是其实在模拟器上也有很多其他的功能,在本文中主要对模拟器的一些基本功能进行总结一下。...1 首先,我们了解一下模拟器中常用的一些快捷键: SHIFT+CMD+H———回到桌面 CMD+S———模拟器截屏(所截图片都在桌面上) CMD+1/2/3———调整模拟器屏幕大小 CMD+左右方向——...—调整模拟器的方向 CMD+H———隐藏模拟器 CMD+Q———退出模拟器 Option+鼠标———捏合手势 CMD+K———调出/关闭模拟器键盘 两次 SHIFT+CMD+H 会调出在底部显示当前哪些应用程序在运行...,可以选择杀死应用(也可以连续两次鼠标点按home键) 2 添加简体中文拼音输入法 在iOS的第二个界面:iPhone主界面中: Settings ->General ->Keyboard->
(MacOS使用占位符替换用户可识别的路径组件以保护隐私) 参考: Examining the fields in a crash report
通过本文,您将了解到: KVO Crash 的主要原因 KVO 防止 Crash 的常见方案 我的 KVO 防护实现 测试 KVO 防护效果 文中示例代码在: bujige / YSC-Avoid-Crash...KVO Crash 的常见原因 KVO(Key Value Observing) 翻译过来就是键值对观察,是 iOS 观察者模式的一种实现。...方案一:大白健康系统 -- iOS APP运行时 Crash 自动修复系统 首先为 NSObject 建立一个分类,利用 Method Swizzling,实现自定义的 BMP_addObserver...---- 参考资料 大白健康系统 -- iOS APP运行时 Crash 自动修复系统 iOS-APP-运行时防 Crash 工具 XXShield 练就 - 茶茶的小屋 iOS 中的 crash 防护...(三)KVO 造成的 crash iOS KVO crash 自修复技术实现与原理解析
这个系列将会介绍如何设计一套 APP Crash 防护系统。...sent to class(找不到类方法实现) KVO Crash KVC Crash NSNotification Crash NSTimer Crash Container Crash(集合类操作造成的崩溃...,例如数组越界,插入 nil 等) NSString Crash (字符串类操作造成的崩溃) Bad Access Crash (野指针) Threading Crash (非主线程刷 UI) NSNull...我们从『 iOS 开发:『Runtime』详解(一)基础知识』知道了消息转发机制中三大步骤:消息动态解析、消息接受者重定向、消息重定向。...具体实现可参考代码: bujige / YSC-Avoid-Crash ---- 参考资料 How Not to Crash iOS 防止应用崩溃 大白健康系统--iOS APP运行时Crash自动修复系统
公司要了高通的Gaia库实现OTA,版本迭代他们用了CryptoKit,而我们的app还是支持iOS9的,所以得做一下兼容: 网上找了方法:(虽然编译过了,但是iOS12的手机点击就闪退) #if canImport
1.Crash 捕获 根据 Crash 的不同来源,分为以下三类: 1.2.NSException 应用层的异常,未被捕获的异常,导致程序向自身发送了 SIGABRT 信号而崩溃,是应用程序自己可控的...previousUncaughtExceptionHandler = NULL; + (void)registerUncaughtExceptionHandler { // 将别人之前注册的Crash...n %@\n callStackSymbols:\n %@", name, reason, [stackInfo componentsJoinedByString:@"\n"]]; // 保存Crash...防护 2.1.方法未实现 找不到方法的实现:unrecognized selector sent to instance,查找过程详情可见:iOS_Objective-C 消息发送(消息查找 及 消息转发...KVC 的搜索模式详情可见:iOS_KVC:Key-Value Coding-2(访问者搜索模式),当最终找不到对应的key时,会导致 crash。
# I: Crash 类型 和多数操作系统一样,iOS 的异常也基本分为 用户层 系统底层 信号 这三个类别,接下来我们看下每种异常都做了哪些事情 Mach Exception Mach 异常...另一种是 iOS 系统独有的逻辑或者说是苹果独有的。就是用户层面的异常也都首先下沉到 mach 层再发出来,也等于是另一种意义上的 mach 异常。...,本次循环结束后 app 才退出 既下图的 retVal 被置为 NO iOS Crash 发生后 runloop 中的 do-while 循环的条件会被置为 NO,然后 Handler...# 0x5: 参考资料 Apple iOS Api iOS Open Sourcre CFRunloop XNU 3248.60.10 源码 Understanding Crash Reports on...iPhone OS 《深入解析 MAC OS X & IOS 操作系统》 # 0x6: 最后 大概这就是所有 Crash 防护的流程,通过两篇文章讲解,希望大家对 iOS 系统的 Crash 流程能有些许的了解
更低的Crash率不但能让产品获得更好的用户口碑,在整个流程中也能让团队成员获得更多的成长,加深对iOS系统底层的理解,为今后的开发带了更大的帮助。 ?...在iOS系统中基本可以总结出这四个步骤, Crash防护 - 通过Hook等手段,对一些类似容器类进行入参校验等措施,来进来避免Crash的发生 Crash拦截 - 如果第一步防护失败,那么在Crash...AOP: iOS中AOP的相关知识网上线程的代码也很多,这里就不在赘述,但是在AOP这种频繁调用的场景中就需要注意的地方和坑点比较多。...AOP的性能问题:上面说了AOP的原理是会多一层方法调用,那么再结合iOS的方法转发流程可想而知,AOP必定会造成性能的损耗,而且在Crash防护场景下频繁调用,性能问题一定不能忽略。 ?...全民K歌国际版招聘Android/iOS客户端开发,点击左下方“查看原文”投递简历~ 也可将简历发送至邮箱:tmezp@tencent.com
领取专属 10元无门槛券
手把手带您无忧上云