转一篇别人写的崩溃调试 iOS崩溃调试 http://www.cocoachina.com/ios/20160115/15009.html
一、原生代码处理
正常代码使用中的几种崩溃处理:
1.NSException收集崩溃信息
// 将系统提供的获取崩溃信息函数写在这个方法中,以保证在程序开始运行就具有获取崩溃信息的功能
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 将下面C函数的函数地址当做参数
NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);
return YES;
}
// 设置一个C函数,用来接收崩溃信息
void UncaughtExceptionHandler(NSException *exception){
// 可以通过exception对象获取一些崩溃信息,我们就是通过这些崩溃信息来进行解析的,例如下面的symbols数组就是我们的崩溃堆栈。
NSArray *symbols = [exception callStackSymbols];
NSString *reason = [exception reason];
NSString *name = [exception name];
}
//代码调用第2种方法:获取崩溃统计的函数指针
NSUncaughtExceptionHandler *handler = NSGetUncaughtExceptionHandler();
2.dSYM
每次Archive一个包之后,都会随之生成一个dSYM文件。每次发布一个版本,我们都需要备份这个文件,以方便以后的调试。
需要使用Xcode自带的symbolicatecrash工具来将.Crash和.dSYM文件进行符号化
3、通过Xcode查看设备崩溃信息
选择window-> devices -> 选择自己的手机 -> view device logs 就可以查看我们的崩溃信息了。
4、苹果自带崩溃统计工具
苹果在Xcode中为我们集成了崩溃统计功能,在Window->Organizer->Crashes中可以看到
需要用户在iPhone中进行设置,设置->隐私->诊断与用量->诊断与用量数据(iOS8以下在通用中设置),选择自动发送,并与开发者共享即可
二、第三方开源代码分析统计
1.bugHD
来源http://bughd.com/doc/ios-customize
2.bugtags
来源http://help.bugtags.com/hc/kb/article/124400/
http://help.bugtags.com/hc/kb/article/68482/
3.KSCrash
https://github.com/kstenerud/KSCrash4.友盟
总结:
第三方统计工具并不是用的越多越好,使用多个崩溃收集第三方会导致NSSetUncaughtExceptionHandler()函数指针的恶意覆盖,导致有些第三方不能收到崩溃信息。
第三方统计工具并不是用的越多越好,使用多个崩溃收集第三方会导致NSSetUncaughtExceptionHandler()函数指针的恶意覆盖,导致有些第三方不能收到崩溃信息。