2014-03-26 281 views
1

基础:使用了XCode(最新版本)的iOS应用开发的Objective-C/C++模块的iOS应用程序异常处理

我有可能需要一些专家的帮助一个问题....我的应用程序的设计上运行所有硬件上的iOS平台,但我正在打墙。该应用程序在我的iPod和iPad上的所有模拟器上运行良好,但我的一些测试人员使用的是iPhone,并且问题仅出现在该硬件平台上。

最基本的问题是,应用程序似乎在各个时间点都会发生异常,有时甚至会在早期使用,有时会超过一个小时。我怀疑它可能是一个内存泄漏或一个无效的调用,只偶尔会增加其丑陋的头,但我需要找出答案。我已经编写了应用程序来创建一个日志文件,当它运行在“调试”版本中时,我可以将这些文件部署到拥有iPhone的测试人员,但我不能总是访问他们的手机来检索日志文件。

我有一个内置于应用程序中的机制来发送屏幕截图的电子邮件,我可以很容易地修改它来发送日志文件给我,但我需要一种方法来触发它。我知道如何从我的应用程序中捕获异常,包括添加内存探测器,这些内存探测器会自动报告问题并在应用程序实际退出之前调用适当的方法。在应用程序本身内部有没有办法在应用程序结束之前自动捕获这些问题并进行报告,并且所有可用的信息都会丢失?另外,如果以某种方式通过编程方式来执行/转储调用堆栈,将其写入我的日志文件,与在XCode中使用模拟器时提供的模拟器相同,并保存该信息,会有很大的帮助。

谢谢。

p.s .:我知道这不是一个简单的请求,而且这个回应也可能不是很简单,所以在此先感谢您的帮助。

+0

'applicationDidReceiveMemoryWarning'的applicationDidFixnishLaunchin方法线? – esh

回答

2

我已经使用此代码进行全局级异常处理。我遇到了一个问题,即运行应用程序的任何一点产生异常和应用程序崩溃,所以我实现了应用程序级异常处理。

请参考此链接堆栈溢出可能是这对你有用。

How do you implement global iPhone Exception Handling?

写入此NSSetUncaughtExceptionHandler(&的UncaughtExceptionHandler)的代码在AppDelegate类

-(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions: 
     (NSDictionary*)launchOptions 
    { 
     NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler); 

     EDIT: 
     if([[NSUserDefaults standardUserDefaults] boolForKey:@"isExceptionOccured"]) 
     { 
     //call sever code here 
     [[NSUserDefaults standardUserDefaults] setBool:FALSE forKey:@"isExceptionOccured"]; 
     } 
     //rest of your code 
     } 


     void uncaughtExceptionHandler(NSException *exception) 
     { 


     NSLog(@"Exception Got %@",[exception description]); 
     //do what ever you what here 
    //can save any `bool` so that as aaplication run on immediate next launching of crash 
    //could intimate any thing 

    EDIT: 

    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"isExceptionOccured"]; 

     } 
+0

谢谢!那很棒!你有什么方法可以将堆栈跟踪扩展为更易读的东西,特别是获取堆栈中模块的相关行号?我不介意写代码,我只需要一些方向...... – miwalsh

+0

@ user2893015再次看到此代码...可能这会帮助你。 –

相关问题