iOS崩溃
崩溃的产生
应用违反操作系统规则
1. 违反iOS规则包括在启动、恢复、挂起、退出时watchdog超时、用户强制退出和低内存终止。
application:didFinishLaunchingWithOptions:
applicationWillResignActive:
applicationDidEnterBackground:
applicationWillEnterForeground:
applicationDidBecomeActive:
applicationWillTerminate:
2. 用户强制退出:当APP无响应的时候,用户通过双击home键杀掉APP或者直接关机
低内存终止:当内存使用达到一定程度时,操作系统将发出一个UIApplicationDidReceiveMemoryWarningNotification 通知。同时,调用 didReceiveMemoryWarning 方法。
此时,为了让应用继续正常运行,操作系统开始终止在后台的其他应用以释放一些内存。所有后台应用被终止后,如果你的应用还需要更多内存,操作系统会将你的应用也终止掉,并产生一个崩溃日志,(会有一个jettisoned字样)
3. 应用中有bug
(1). Exception Code
0x8badf00d 这个异常编码表示应用是因为发生watchdog超时而被终止的,通常是应用花费了太多的时间而无法启动、终止货响应系统事件
0xdeadfa11 “dead fall” 表示应用是被用户强制退出的
0xdead10cc “dead lock” 表示应用在后台运行时占用系统资源
(2). Exception Type
EXC_CRASH (SIGABRT) 通常是由于对象接受到了未实现的消息引起的
EXC_BAD_ACCESS(SIGSEGV/SIGBUS) 通常是内存问题,比如访问了已被释放的内存
EXC_BREAKPOINT(SIGTRAP) 异常退出
EXC_GUARD 访问非法资源
崩溃的解析
1. 打开终端,cd到dSYM文件
查看dYSM的UUID,主要是判断崩溃的版本和当前的符号表的版本是否一致
dwarfdump –uuid appname.app.dSYM
修改:
需要cd到appname.app.dSYM/Contents/Resources/DWARF目录下,去执行dwarfdump –uuid appname才能解析出UUID
2. 如果一致,查看堆栈的跟APP相关的崩溃的地址信息
dwarfdump –arch=armv7 –lookup 0x97525 /…/appname.app.dSYM/Contents/Resources/DWARF/appname
得到解析之后的信息,能获取到崩溃的类和行号