//
|
// main.m
|
// screendisplay
|
//
|
// Created by 单军华 on 2018/6/29.
|
// Copyright © 2018年 单军华. All rights reserved.
|
//
|
|
#import <UIKit/UIKit.h>
|
#import "AppDelegate.h"
|
|
void UncaughtExceptionHandler(NSException *exception);
|
|
|
int main(int argc, char * argv[]) {
|
@autoreleasepool {
|
@try {
|
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
|
} @catch (NSException *exception) {
|
|
UncaughtExceptionHandler(exception);
|
} @finally {
|
}
|
}
|
}
|
|
|
// 设置一个C函数,用来接收崩溃信息
|
void UncaughtExceptionHandler(NSException *exception) {
|
// 可以通过exception对象获取一些崩溃信息,我们就是通过这些崩溃信息来进行解析的,例如下面的symbols数组就是我们的崩溃堆栈。
|
NSArray *symbols = [exception callStackSymbols];
|
NSString *reason = [exception reason];
|
NSString *name = [exception name];
|
NSString *caches = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject;
|
|
NSMutableDictionary *dictM = [NSMutableDictionary dictionaryWithContentsOfFile:[caches stringByAppendingPathComponent:@"zplan_crash.plist"]];
|
|
if (!dictM) {
|
dictM = [NSMutableDictionary dictionary];
|
}
|
|
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
|
formatter.dateFormat = @"yyyyMMddHHmmssSSS";
|
NSString *timestamp = [formatter stringFromDate:[NSDate date]];
|
|
|
NSDictionary *dict = @{
|
timestamp : @{
|
[timestamp stringByAppendingString:@"name"] : name,
|
[timestamp stringByAppendingString:@"_reason"] : reason,
|
[timestamp stringByAppendingString:@"__symbols"] : symbols
|
}
|
};
|
[dictM setValuesForKeysWithDictionary:dict];
|
[dictM writeToFile:[caches stringByAppendingPathComponent:@"zplan_crash.plist"] atomically:YES];
|
|
}
|