崩溃问题 | 内存报警闪退 | 当iOS检测到内存过低时,它的VM系统会发出低内存警告通知,尝试回收一些内存 | 1.在Debug模式下,可以主动将客户端执行的动作逻辑写入一个log文件中,这样程序童鞋可以将内存预警的逻辑写入 该log文件 2.可以通过Instruments工具中的Allocations和 Leaks模块库来发现内存分配问题和内存泄漏问题。 |
响应超时 | 当应用程序对一些特定的事件(比如启动、挂起、恢复、结束)响应不及时,苹果的Watchdog机制会把应用程序干掉,并生成一份相应的crash日志。 | 图中的几个方法是否有比较重的阻塞UI的动作。 图中的几个方法是否有比较重的阻塞UI的动作。 application:didFinishLaunchingWithOptions: applicationWillResignActive: applicationDidEnterBackground: applicationWillEnterForeground: applicationDidBecomeActive: applicationWillTerminate | |
用户强制退出 | 先按住电源键,直到出现“滑动关机”的界面时,再按住Home键,这时候当前应用程序会被终止掉,并且产生一份相应事件的crash日志。 |
| |
应用逻辑的Bug | 大多数闪退崩溃日志的产生都是因为应用中的Bug,这种Bug的错误种类有很多,比如 SEGV:(Segmentation Violation,段违例),无效内存地址,比如空指针,未初始化指针,栈溢出等;
SIGABRT:收到Abort信号,可能自身调用abort()或者收到外部发送过来的信号;
SIGBUS:总线错误。与SIGSEGV不同的是,SIGSEGV访问的是无效地址(比如虚存映射不到物理内存),而SIGBUS访问的是有效地址,但总线访问异常(比如地址对齐问题);
SIGILL:尝试执行非法的指令,可能不被识别或者没有权限;
SIGFPE:Floating Point Error,数学计算相关问题(可能不限于浮点计算),比如除零操作;
SIGPIPE:管道另一端没有进程接手数据;
常见的崩溃原因基本都是代码逻辑问题或资源问题,比如数组越界,访问野指针或者资源不存在,或资源大小写错误等。 |
|