线上Crash信息收集调试
2018-03-08 本文已影响5人
不由己
线上出现问题如何定位出错位置
第一种、自己收集奔溃信息
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 将下面C函数的函数地址当做参数
NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);
return YES;
}
// 接收崩溃信息
void UncaughtExceptionHandler(NSException *exception) {
// 可以通过exception对象获取一些崩溃信息,我们就是通过这些崩溃信息来进行解析的
NSArray *symbols = [exception callStackSymbols];
NSString *reason = [exception reason];
NSString *name = [exception name];
}
缺点:定位精度不够
第二种、dSYMf分析日志
通过Mac自带的命令行工具解析Crash文件需要具备三个文件
- symbolicatecrash,Xcode自带的崩溃分析工具,使用这个工具可以更精确的定位崩溃所在的 位置,将0x开头的地址替换为响应的代码和具体行数。
- 我们打包时产生的dSYM文件。
- 崩溃时产生的Crash文件,例如:*.crash。
我在解析崩溃信息的时候,首先在桌面上建立一个Crash文件夹,然后将.Crash、.dSYM、symbolicatecrash放在这个文件夹中,这样进入这个文件夹下,直接一行命令就解决了。
开启命令行工具,进入崩溃文件夹crash中
使用命令解析Crash文件,*号指的是具体的文件名
./symbolicatecrash ./*.crash ./*.app.dSYM > symbol.crash
第三种、通过Xcode查看设备崩溃信息
除了上面的系统分析工具来进行分析,如果是我们自己直接使用手机连接崩溃或者崩溃之后连接手机,选择window-> devices -> 选择自己的手机 -> view device logs 就可以查看我们的崩溃信息了。