iOS偶发崩溃

作者: 晓晓_明 | 来源:发表于2016-08-13 13:18 被阅读0次

    某软件公司的一天上午,测试妹子来到开发面前

    测试妹子:刚才程序崩溃了

    开发:怎么崩溃的??

    测试妹子:不知道啊,就随便点点就崩溃了

    开发:你再点一次试试??

    。。。。

    测试妹子:不崩溃了。。是偶发的。。


    各位做开发的小伙伴,上面的场景是不是很熟悉??

          刚刚接触iOS开发的小伙伴遇到上面的情况一定很头疼,有一些不太负责任的人也许就直接当没事发生一样。对于这种偶发崩溃问题,各个公司都有自己的解决方案,今天我给大家介绍一下我的解决方案。

    1.在程序启动的方法里设置捕获异常的监听

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    NSSetUncaughtExceptionHandler (&UncaughtExceptionHandler);

    // Override point for customization after application launch.

    return YES;

    }

    2.实现监听方法

    void UncaughtExceptionHandler(NSException *exception) {

    NSDate *currentDate = [NSDate date];//获取当前时间,日期

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

    [dateFormatter setDateFormat:@"YYYY-MM-dd-HH-mm-ss"];

    NSString *dateString = [dateFormatter stringFromDate:currentDate];

    NSString *system = [NSString stringWithFormat:@"iOS_%@",[UIDevice currentDevice].systemVersion];

    NSArray *arr = [exception callStackSymbols];//得到当前调用栈信息

    NSString *reason = [exception reason];//非常重要,就是崩溃的原因

    NSString *name = [exception name];//异常类型

    NSMutableString *stackContent = [NSMutableString string];

    [stackContent appendString:@"\n\nexception message:\n"];

    for(NSString *stackC in arr)

    {

    [stackContent appendString:stackC];

    [stackContent appendString:@"\n"];

    }

    NSString *crashStr =[NSString stringWithFormat:@"crash date : %@ \n system : %@ \n exception type : %@ \n crash reason : %@ \n call stack info : %@",dateString ,system , name, reason, stackContent];

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSFileManager *fileManager = [NSFileManager defaultManager];

    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"log"];

    if (![fileManager fileExistsAtPath:filePath]) {

    [fileManager createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil];

    }

    NSString *fileName = [NSString stringWithFormat:@"crash_%@", dateString];

    NSString *fileNameStr = [NSString stringWithFormat:@"%@.log", fileName];

    NSString *testpath = [filePath stringByAppendingPathComponent:fileNameStr];

    [fileManager createFileAtPath:testpath contents:[crashStr dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];

    }

    3.在plist文件里增加配置,允许访问沙盒目录

    4.程序崩溃时,把设备连接到电脑上,打开iTunes,鼠标放在红色矩形框内向下滑动,滑动到最下面,如图

    5.如图所示,点击存储到,选择一个目录就可以把日志文件导出来了


    好了,拿到日志后就可以通过日志进行分析啦

    第一次写文章,如果有哪里写的不对,欢迎各位小伙伴提出来哦~~

    相关文章

      网友评论

        本文标题:iOS偶发崩溃

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