版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://guoxiaoxin.blogbus.com/logs/74067257.html

我们可以在delegate的terminateWithException里,写一些垂死挣扎的代码 - 例如保存数据,例如汇报crash情况到服务器.

void exceptionHandler(NSException *exception)

{

id delegate = [[UIApplication sharedApplication] delegate];

if([delegate respondsToSelector:@selector(terminateWithException:)])

{

[delegate performSelector:@selector(terminateWithException:) withObject:exception];

}

}

void signalHandler(int sig, siginfo_t *info, void *context)

{

// signal exception

NSException *e = [NSException exceptionWithName:@"signal exception"

reason:[NSString stringWithFormat:@"signal %d", sig]

userInfo:nil];

exceptionHandler(e);

}

int main(int argc, char *argv[])

{

// For uncaultexception

NSSetUncaughtExceptionHandler(&exceptionHandler);

// For signals

struct sigaction sigAction;

sigAction.sa_sigaction = signalHandler;

sigAction.sa_flags = SA_SIGINFO;

sigemptyset(&sigAction.sa_mask);

sigaction(SIGQUIT, &sigAction, NULL);

sigaction(SIGILL, &sigAction, NULL);

sigaction(SIGTRAP, &sigAction, NULL);

sigaction(SIGABRT, &sigAction, NULL);

sigaction(SIGEMT, &sigAction, NULL);

sigaction(SIGFPE, &sigAction, NULL);

sigaction(SIGBUS, &sigAction, NULL);

sigaction(SIGSEGV, &sigAction, NULL);

sigaction(SIGSYS, &sigAction, NULL);

sigaction(SIGPIPE, &sigAction, NULL);

sigaction(SIGALRM, &sigAction, NULL);

sigaction(SIGXCPU, &sigAction, NULL);

sigaction(SIGXFSZ, &sigAction, NULL);

// startup

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

int retVal = UIApplicationMain(argc, argv, @"NBApplication", @"twitBirdAppDelegate");

[pool release];

return retVal;

}

crash , 就两种情况,一种是异常,一种是中断.

void exceptionHandler(NSException *exception) 处理异常

void signalHandler(int sig, siginfo_t *info, void *context) 处理中断.

- (void)terminateWithException:(NSException*)e

{

static BOOL deadway = NO;

if(deadway)

return;

deadway = YES;

NSLog(@"Exception --- %@", e);

[self applicationWillTerminate:[UIApplication sharedApplication]];

deadway = NO;

}


收藏到:Del.icio.us

异常处理 --- 一些垂死挣扎的代码相关推荐

  1. 基于Javaweb的小项目(类似于qqzone) 4 ——通用代码模块 - 过滤器、异常处理、servlet通用代码块

    1.过滤器Filter 对页面传回的内容进过滤,并设置编码,防止出现中文乱码问题 [CharacterEncodingFilter.java] package com.javaweb.qqzone.m ...

  2. ssm 异常捕获 统一处理_SpringMVC 统一异常处理介绍及实战

    背景 什么是统一异常处理 目标 统一异常处理实战 用 Assert(断言) 替换 throw exception 定义统一异常处理器类 扩展 总结 <Java 2019 超神之路> < ...

  3. 看看人家 SpringBoot 的全局异常处理,多么优雅...

    点击关注公众号,Java干货及时送达 本篇文章主要介绍的是SpringBoot项目进行全局异常的处理. SpringBoot全局异常准备 说明:如果想直接获取工程那么可以直接跳到底部,通过链接下载工程 ...

  4. 看看人家 SpringBoot 的全局异常处理多么优雅...

    1 SpringBoot全局异常准备 说明:如果想直接获取工程那么可以直接跳到底部,通过链接下载工程代码. 开发准备 环境要求JDK:1.8SpringBoot:1.5.17.RELEASE 首先还是 ...

  5. C错误异常处理,异常处理

    预处理器标识#error的目的是什么啊? 指令 用途# 空指令,无任何效果#include 包含一个源代码文件#define 定义宏#undef 取消已定义的宏#if 如果给定条件为真,则编译下面代码 ...

  6. java 规范异常的处理_规范-异常处理

    1. 为什么需要规范的异常处理? 首先,规范异常处理也是为了后期能更好的维护,减少程序出错,别再哪里都try{}catch(){},对于有强迫症的我,规范处理异常是必不可少的:规范异常处理能让你代码变 ...

  7. 第三十九篇 Python异常处理

    一. 什么是异常 异常就是程序运行时发生的错误,在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止,在python中,错误触发的异常如下 错误分成两种: #语法 ...

  8. Spring MVC之异常处理

    2019独角兽企业重金招聘Python工程师标准>>> Spring MVC之异常处理 Spring MVC提供了几种异常处理的方法: 对于每个异常类的处理 对于每个@Control ...

  9. c语言常用的异常处理,C语言中的异常处理

    一 前言: 异常处理,对于做面向对象开发的开发者来说是再熟悉不过了,例如在C#中有 try { ... } catch( Exception e){...} finally{ ..... } 在C++ ...

最新文章

  1. .NET Core竟然无法在Mac下进行build
  2. 如何用ActionScript制作绚丽的特效——Silk
  3. 【机器学习】基于实战项目的SVM算法库使用方法详解
  4. python打印星星居中_python中怎么打印星星
  5. silverlight bing maps sdk MapControl Sdk
  6. 当年中国的“四大工学院”,现在都咋样了?
  7. matlab6.0序列号,MFC软件获取USB设备的制造商、产品、序列号
  8. php追加数据,php追加数据到mysql
  9. elementUI Drawer 抽屉 Dialog 对话框 等弹出组件的遮罩层以及多层遮罩解决办法
  10. 数据库工作笔记018---MySQL 中 You can't specify target table '表名' for update in FROM clause错误解决办法
  11. 图像识别DM8127开发攻略——UBOOT的移植说明
  12. 定义或修改本地屏幕元素的注释
  13. 北师大有计算机技术专硕嘛,北师大新增一硕士专业 称要培养作家
  14. 不打补贴战,快狗打车凭什么冲刺“同城货运第一股”?
  15. Go工程管理和业务实践
  16. Newton's Dark Secrets《牛顿探索》
  17. 【离散数学】集合的基数
  18. My 2007 Fash game: Elite Shooter
  19. 访问者模式(Vistor Pattern)
  20. 商淘软件多用户商城系统WSTMart v2.0.8程序发布

热门文章

  1. Unity3d C# 实现UGUI 输入框调用软键盘输入的完整功能(含工程源码,适用触屏一体机等)
  2. 如何解决MySQL无法打开之——错误2013:lose connection to MySQL blablabla
  3. java窗口程序实例_Java Swing快速构建窗体应用程序
  4. 移动距离 奇妙的数字
  5. RDKit|分子指纹提取、相似性比较及应用
  6. js算法之旅:用队列和栈计算出扑克玩:拖板车(小猫钓鱼) 游戏的结果
  7. 关于HTTP中的数据协商
  8. python 在linux中把doc转换为docx格式文件(支持word97和word2003)
  9. 小米手机运行linux,小米6成功刷入UOS国产操作系统,可开机运行
  10. 从NT开发过程中看到的东西