您的位置:首页 > 编程语言

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

2012-11-13 15:08 120 查看
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: