【Mac】Mac OS 捕获异常并打印

1. 添加库文件

ExceptionHandling.framework

2. 在 applicationDidFinishLaunching

添加

 

    //add the excepiton catch

    [[NSExceptionHandler defaultExceptionHandler] setExceptionHandlingMask:NSLogAndHandleEveryExceptionMask];

    [[NSExceptionHandler defaultExceptionHandler] setDelegate:self];

 

3. 实现方法

 

 

- (BOOL)exceptionHandler:(NSExceptionHandler *)sender shouldLogException:(NSException *)exception mask:(NSUInteger)aMask {

    [self printStackTrace:exception];

    return YES;

}

 

- (BOOL)exceptionHandler:(NSExceptionHandler *)sender shouldHandleException:(NSException *)exception mask:(NSUInteger)aMask {

    NSLog(@"printStackTrace: %@", [exception reason]);

    return YES;

}

 

4. 打印日志

 

 

- (void)printStackTrace:(NSException *)e

{

    NSString *stack = [[e userInfo] objectForKey:NSStackTraceKey];

    

    if (stack) {

        NSTask *ls = [[NSTask alloc] init];

        NSString *pid = [[NSNumber numberWithInt:[[NSProcessInfo processInfo] processIdentifier]] stringValue];

        NSMutableArray *args = [NSMutableArray arrayWithCapacity:20];

 

        [args addObject:@"-p"];

        [args addObject:pid];

        [args addObjectsFromArray:[stack componentsSeparatedByString:@"  "]];

        // Note: function addresses are separated by double spaces, not a single space.

 

        [ls setLaunchPath:@"/usr/bin/atos"];

        [ls setArguments:args];

 

        NSPipe *pipe;

        pipe = [NSPipe pipe];

        [ls setStandardOutput: pipe];

        NSFileHandle *file;

        file = [pipe fileHandleForReading];

        [ls launch];

        NSData *data;

        data = [file readDataToEndOfFile];

        NSString *string;

        string = [[NSString alloc] initWithData: data

                                       encoding: NSUTF8StringEncoding];

        NSString *strFormat = [NSString stringWithFormat:@"\n\n*************************exception begin\nexception time: %@\n%@\n*************************exception end\n\n",[NSDate date] ,string];

        NSLog(@"printStackTrace: %@", strFormat);

    } else {

        NSLog(@"No stack trace available.");

    }

}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值