基础知识:使用 XCode(最新版本)、Objective-C/C++ 模块开发的 iOS 应用程序
我有一个问题可能需要一些专家的帮助....我的应用程序设计为在 iOS 平台上运行,在所有硬件上,但我碰壁了。该应用程序在我的 iPod 和 iPad 上的所有模拟器上运行良好,但我的一些测试人员使用 iPhone,并且问题仅出现在该硬件平台上。
基本问题是应用程序似乎在不同时间点异常终止,有时是在使用初期,有时是在一个多小时后。我怀疑这可能是内存泄漏或无效调用,只是偶尔会抬起丑陋的头,但我需要找出答案。当应用程序在“调试”版本中运行时,我已经对应用程序进行了编码以创建日志文件,我可以将它们部署到拥有 iPhone 的测试人员,但我无法始终访问他们的手机来检索日志文件。
我在应用程序中内置了一种机制来发送屏幕截图的电子邮件,我可以轻松修改它以将日志文件发送给我,但我需要一种方法来触发它。
我的问题:我来自一个基于 MS 的世界,我知道如何从我的应用程序内部捕获异常,包括添加自动报告问题并在应用程序实际退出之前调用适当方法的内存探测器。有没有一种方法可以从应用程序内部捕获这些问题并在应用程序结束和所有可用信息丢失之前自动报告这些问题?
此外,如果有某种方法以编程方式遍历/转储调用堆栈,将其写入我的日志文件,就像在 XCode 中使用模拟器时模拟器提供的方式一样,并保存该信息,它会会有很大的帮助。
谢谢。
p.s.:我知道这不是一个简单的请求,而且响应也很可能不简单,所以在此先感谢您的帮助。
最佳答案
我已将此代码用于全局级别的异常处理。我遇到了一个问题,即运行应用程序的任何一点都会产生异常并且应用程序崩溃,所以我已经实现了应用程序级异常处理。
请引用堆栈溢出上的此链接,这可能对您有用。
How do you implement global iPhone Exception Handling?
在Appdelegate类的applicationDidFixnishLaunchin方法中写这NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler)行代码
-(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"];
}
关于iOS 应用异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22653803/