异常处理 --- 一些垂死挣扎的代码

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值