iOS Developer程序员

iOS偶发崩溃

2016-08-13  本文已影响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.如图所示,点击存储到,选择一个目录就可以把日志文件导出来了


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

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

上一篇下一篇

猜你喜欢

热点阅读