仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1515|回复: 13
打印 上一主题 下一主题

[学习教程] IOS编程之ios Crash闪退日记猎取和上传至服务器(NSSetUncaughtExceptionHandler)仓酷云 ...

[复制链接]
莫相离 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:26:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
管理所有设备发生的事件比如屏幕旋转屏幕关闭或者一些其他的程序的控制逻辑也应该写在这里他的初始化函数是-(id)initWithNibName:(NSString*)nibNamebundle:(NSBundle*)nibBundle后面那个NibName是InterfaceBuilder里设计的界面现在IB已经集成到XCode里了比来客户有个请求:人家谁谁有crash日记捕捉和上传,我们是否是也要做一个...人家谁谁.....另有甚么甚么功效........
恰好比来也在研讨这方面东东,以是收拾一下分享给人人:怎样用程序猎取Crash日记并能够上传Crash日记。
起首我们收拾常常会闪退的非常哪些:数组越界、空援用、援用不决义办法、内存空间不敷等等。
友盟分享背景是能够看到crash的日记,以下图:

<br>
入手下手研讨的时分,我有两个疑问:
1.怎样猎取crash闪退日记(工具和程序两种办法);
2.剖析crash;
申明:这里说的crash日记不是在联调的情形下(是临盆情况,普通的说就是公布了的产物)。
怎样猎取crash闪退日记--工具检察
先看第一个成绩怎样检察,我搜刮的办法有以下几个:
第一个办法:XCode的菜单Window->Organizer选择Devices->选中的手机->点击手机称号右边的箭头会比及以下图

<br>
在右侧竖蓝色矩形框中Type内里呈现两品种型:Unknown和Crash这两品种型分离是内存不敷接纳内存kill使用程序招致Crash和程序非常Crash的日记。
上图是我在刚翻开日记(立马、即刻)截的图,不然过了5秒中,会酿成如许(主动剖析):

<br>
注重对照一下白色框框内容,这个日记也基础上上告知你crash的缘故原由了。
第二种办法翻开手机->设置->通用->关于本机->诊断与用量->诊断与用量数据这内里就是一切使用的Crash日记。
第三种办法经由过程iTunesConnect(ManageYourApplications-ViewDetails-CrashReports)猎取用户的crash日记。办法良多这里未几列了。
剖析crash
拜见:http://stackoverflow.com/questions/1460892/symbolicating-iphone-app-crash-reports)
用程序猎取crash日记
可是这里都是工具,没有效到程序猎取,经由想方设法的查询(思绪是:先找到寄存crash的iphone体系路径:var/mobile/Library/Logs/CrashReporter)找到了crash寄存的路径,唉,苦于没法读取(用程序读出来都是nil),固然假如是逃狱手机就纷歧样是能够读取的。这个思绪断失落了。
换个思绪:本人用程序捕捉crash,保留到当地能够吗?这么一试,公然........
第一步:新建一个承继自NSObject的类(Xcode新建一个空项目历程略),取名字CatchCrash,在h和m文件中写下:
.h文件

  • #import<Foundation/Foundation.h>

  • @interfaceCatchCrash:NSObject

  • voiduncaughtExceptionHandler(NSException*exception);

  • @end
.m(m)文件

  • #import"CatchCrash.h"

  • @implementationCatchCrash

  • voiduncaughtExceptionHandler(NSException*exception)
  • {
  • //非常的仓库信息
  • NSArray*stackArray=[exceptioncallStackSymbols];
  • //呈现非常的缘故原由
  • NSString*reason=[exceptionreason];
  • //非常称号
  • NSString*name=[exceptionname];
  • NSString*exceptionInfo=[NSStringstringWithFormat:@"Exceptionreason:%@nExceptionname:%@nExceptionstack:%@",name,reason,stackArray];
  • NSLog(@"%@",exceptionInfo);

  • NSMutableArray*tmpArr=[NSMutableArrayarrayWithArray:stackArray];
  • [tmpArrinsertObject:reasonatIndex:0];

  • //保留到当地--固然你能够鄙人次启动的时分,上传这个log
  • [exceptionInfowriteToFile:[NSStringstringWithFormat:@"%@/Documents/error.log",NSHomeDirectory()]atomically:YESencoding:NSUTF8StringEncodingerror:nil];
  • }

  • @end
第二步:增加一个承继自UIViewcontroller的类,取名字为TestViewController。
第三步:注册CatchCrash非常处置办法,在Appdelegate写下以下代码:

  • #import"AppDelegate.h"
  • #import"CatchCrash.h"
  • #import"TestViewController.h"

  • @implementationAppDelegate

  • -(BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions
  • {
  • self.window=[[UIWindowalloc]initWithFrame:[[UIScreenmainScreen]bounds]];
  • //Overridepointforcustomizationafterapplicationlaunch.

  • //注册动静处置函数的处置办法
  • NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);

  • TestViewController*testVc=[[TestViewControlleralloc]init];
  • self.window.rootViewController=testVc;

  • self.window.backgroundColor=[UIColorwhiteColor];
  • [self.windowmakeKeyAndVisible];
  • returnYES;
  • }

  • -(void)applicationWillResignActive:(UIApplication*)application
  • {}

  • -(void)applicationDidEnterBackground:(UIApplication*)application
  • {}

  • -(void)applicationWillEnterForeground:(UIApplication*)application
  • {}

  • -(void)applicationDidBecomeActive:(UIApplication*)application
  • {}

  • -(void)applicationWillTerminate:(UIApplication*)application
  • {}
第四部:在TestViewController的Xib下面增加一个按钮并给其增加一个单击事务,TestViewController.m文件中有以下代码:

  • #import"TestViewController.h"

  • @interfaceTestViewController()

  • @end

  • @implementationTestViewController

  • -(id)initWithNibName:(NSString*)nibNameOrNilbundle:(NSBundle*)nibBundleOrNil
  • {
  • self=[superinitWithNibName:nibNameOrNilbundle:nibBundleOrNil];
  • if(self){
  • //Custominitialization
  • }
  • returnself;
  • }

  • -(void)viewDidLoad
  • {
  • [superviewDidLoad];
  • //Doanyadditionalsetupafterloadingtheviewfromitsnib.
  • }

  • -(void)didReceiveMemoryWarning
  • {
  • [superdidReceiveMemoryWarning];
  • //Dispo搜索引擎优化fanyresourcesthatcanberecreated.
  • }

  • #pragmamark-单击事务
  • -(IBAction)crashTapped:(id)sender
  • {
  • //罕见非常1---不存在办法援用
  • //[selfperformSelector:@selector(thisMthodDoesNotExist)withObject:nil];

  • //罕见非常2---键值对援用nil
  • //[[NSMutableDictionarydictionary]setObject:nilforKey:@"nil"];

  • //罕见非常3---数组越界
  • [[NSArrayarray]objectAtIndex:1];

  • //罕见非常4---memorywarning级别3以上
  • //[selfperformSelector:@selector(killMemory)withObject:nil];

  • //其他人人往想吧
  • }

  • #pragmamark-custommethod
  • -(void)killMemory
  • {
  • for(inti=0;i<300;i++)
  • {
  • UILabel*tmpLabel=[[UILabelalloc]initWithFrame:CGRectMake(0,0,320,200)];
  • tmpLabel.layer.masksToBounds=YES;
  • tmpLabel.layer.cornerRadius=10;
  • tmpLabel.backgroundColor=[UIColorredColor];
  • [self.viewaddSubview:tmpLabel];
  • }
  • }

  • @end
运转代码:能够看到闪退,我们用iExplorer翻开:

<br>

关于iOS开发的学习打个比方就像把汽车分解最底层的原料有塑料钢铁再用这些底层的工具造出来发动机座椅最后再加上写螺丝胶水等把汽车就拼起来了iOS基本都是英文的资料
莫相离 该用户已被删除
沙发
 楼主| 发表于 2015-1-21 06:44:22 | 只看该作者
从C语言入门,因为IOS开发用的是OC语言,是在C基础上的,不过也跟C不是很搭界,你可以直接学习OC语言也可以,
小妖女 该用户已被删除
板凳
发表于 2015-1-30 09:57:12 | 只看该作者
iPhone文件系统NSFileManager讲解是本文要介绍的内容,主要是通过iphone文件系统来学习NSFileManager的使用方法,具体内容来看本文详解。
飘飘悠悠 该用户已被删除
地板
发表于 2015-1-30 20:05:00 | 只看该作者
要学会通过各种方法将面前的事情变成自己感兴趣的,那专研起来就不会是无聊和折磨了。
精灵巫婆 该用户已被删除
5#
发表于 2015-1-31 08:11:35 | 只看该作者
因为我们老师也是自学的,给我们讲课说的最多的就是百度,谷歌,查文档。
兰色精灵 该用户已被删除
6#
发表于 2015-2-1 08:16:46 | 只看该作者
我也从简单的状态栏适配开始,先研究了下关于状态栏的适配,特总结如下,供广大网友一起讨论交流。
小魔女 该用户已被删除
7#
发表于 2015-2-3 13:52:50 | 只看该作者
每个行业都一样,想要一天学有所成是不可能的,一定要做好努力的准备,做ios不是简单的学会oc语言。不怕多走弯路,就怕不肯动手。
深爱那片海 该用户已被删除
8#
发表于 2015-2-8 14:06:15 | 只看该作者
同很多iOS开发者一样,我也是通过培训进入到iOS开发这个行业,开始没有打算培训,只准备自己学习一些计算机编程相关的知识,毕业时找一份编程相关工作(本人是信息与计算科学这个专业,是数学系)。
admin 该用户已被删除
9#
发表于 2015-2-9 00:00:25 | 只看该作者
到大三时,学院与我去培训的机构成立了实习基地,并让我们寒假去实习了一段时间,感觉还不错,于是在大四的时候去培训了
老尸 该用户已被删除
10#
发表于 2015-2-11 19:57:57 | 只看该作者
iPhone文件系统:创建、重命名以及删除文件,NSFileManager中包含了用来查询单词库目录、创建、重命名、删除目录以及获取/设置文件属性的方法(可读性,可编写性等等)。
活着的死人 该用户已被删除
11#
发表于 2015-3-2 17:51:37 | 只看该作者
iPhone文件系统:创建、重命名以及删除文件,NSFileManager中包含了用来查询单词库目录、创建、重命名、删除目录以及获取/设置文件属性的方法(可读性,可编写性等等)。
只想知道 该用户已被删除
12#
发表于 2015-3-7 15:34:36 | 只看该作者
中国如今已然发展成为一个软件大国,软件人才的数量跃居全球之首。当然,在苹果平台的开发领域,也保持了相当强劲的发展势头。然而,很多初入iOS开发门槛的开发者,
第二个灵魂 该用户已被删除
13#
发表于 2015-3-15 08:43:24 | 只看该作者
同很多iOS开发者一样,我也是通过培训进入到iOS开发这个行业,开始没有打算培训,只准备自己学习一些计算机编程相关的知识,毕业时找一份编程相关工作(本人是信息与计算科学这个专业,是数学系)。
若天明 该用户已被删除
14#
发表于 2015-3-21 21:41:41 | 只看该作者
众多研发人员积极参与到iOS平台的开发中来也就不足为奇了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-9 03:58

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表