美文网首页
iOS--应用异常捕获

iOS--应用异常捕获

作者: 彬至睢阳 | 来源:发表于2018-03-25 17:21 被阅读0次

#import<Foundation/Foundation.h>

@interface CatchCrash : NSObject

void uncaughtExceptionHandler(NSException *exception); 

@end

-------------

#import "CatchCrash.h"

@implementation CatchCrash

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?name:@"", reason?reason:@"", stackArray?stackArray:@[@""]];

  NSMutableArray *tmpArr = [NSMutableArray arrayWithArray:stackArray];

  [tmpArr insertObject:reason atIndex:0];

  //保存到本地  --  下次启动的时候,上传这个log

  NSString*cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES) firstObject];

  // 实例化NSDateFormatter

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

  // 设置日期格式

  [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

  // 获取当前日期

  NSDate *currentDate = [NSDate date];

  NSString *currentDateString = [formatter stringFromDate:currentDate];

  NSTimeInterval time = [currentDate timeIntervalSinceDate:[PCUtil getAppLauchTime]];

    NSString* useTime=[NSString stringWithFormat:@"%d",(int)time];

  NSString *documnetPath = [cachesDir stringByAppendingPathComponent:@"ErrorDic.plist"];

//    PCLoginSession *session = [PCUtil loginSession];

    NSString*flag;

  if([UIApplication sharedApplication].applicationState == UIApplicationStateActive) {

      flag=@"1";

  }else if([UIApplication sharedApplication].applicationState == UIApplicationStateBackground){

      flag=@"0";

  }else{

      flag=@"";

  }

//准备要存入的字典

  NSDictionary *errDic = @{

                             @"flag":flag,

                            @"exceptionInfo":exceptionInfo

                            };

  //将字典存入指定的本地文件

  [errDic writeToFile:documnetPath atomically:YES];

}

使用在appDelegate里面

//注册消息处理函数的处理方法

    NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);

    //上次异常闪退信息上传

    double seconds = 3.0;

    dispatch_time_t postTime = dispatch_time(DISPATCH_TIME_NOW, seconds * NSEC_PER_SEC);

    dispatch_after(postTime, dispatch_get_main_queue(), ^(void){

//上传服务端

    });

相关文章

网友评论

      本文标题:iOS--应用异常捕获

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