美文网首页
iOS 捕获异常

iOS 捕获异常

作者: 高高叔叔 | 来源:发表于2017-04-27 16:05 被阅读151次

    产品测试和上线后往往会遇到一些bug,开发者需要定位到异常的代码这个时候就要捕获异常。

    可以通过写一个类CrashExceptioinCatcher,在类中定义一个静态方法startCrashExceptionCatch, 方法里调NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);

    绑定void uncaughtExceptionHandler(NSException *exception)方法处理异常信息,在void uncaughtExceptionHandler(NSException *exception)里将异常打印出来,并附带上设备信息提交至服务器,这样在测试时候能够比较有效的收集异常信息。

    头文件
    #import <Foundation/Foundation.h>
    #import <objc/runtime.h>
    
    @interface CatchCrash : NSObject
    
    void uncaughtExceptionHandler(NSException *exception);
    
    @end
    
    实现文件
    void uncaughtExceptionHandler(NSException *exception)
    {
        // 异常的堆栈信息
        NSArray *stackArray = [exception callStackSymbols];
        // 出现异常的原因
        NSString *reason = [exception reason];
        // 异常名称
        NSString *name = [exception name];
        NSString *exceptionInfo = [NSString stringWithFormat:@"Exception reason:%@\nException name:%@\nException stack:%@",name, reason, stackArray];
        // 异常出处
        NSString * mainCallStackSymbolMsg = [CatchCrash getMainCallStackSymbolMessageWithCallStackSymbols:stackArray];
        
        NSMutableArray *tmpArr = [NSMutableArray arrayWithArray:stackArray];
        [tmpArr insertObject:reason atIndex:0];
        NSString * errorPlace = [NSString stringWithFormat:@"Error Place%@",mainCallStackSymbolMsg];
            NSLog(@"初始化完毕%@",errorPlace);
        
        NSString * file =[NSString stringWithFormat:@"%@/Documents/error.log",NSHomeDirectory()] ;
        //保存到本地  --  当然你可以在下次启动的时候,上传这个log
        [exceptionInfo writeToFile:file atomically:YES encoding:NSUTF8StringEncoding error:nil];
        NSLog(@"打印出来看看____%@",exceptionInfo);
    }
    
    使用方法
        //注册消息处理函数的处理方法
        NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
        
        ViewController *testVc = [[ViewController alloc] init];
        self.window.rootViewController = testVc;
        
        self.window.backgroundColor = [UIColor whiteColor];
        [self.window makeKeyAndVisible];
    
    DEMO地址

    https://github.com/godwar10/CatchCrash

    写在最后
    大神勿喷,最近才写记录下方便以后查找。希望能和大家一起学习交流进步。如果觉得好请赏点小钱——谢谢。 祝大家代码永无bug

    相关文章

      网友评论

          本文标题:iOS 捕获异常

          本文链接:https://www.haomeiwen.com/subject/tzxnzttx.html