除了Crittercism之外,处理iOS Exceptions自己的方式

时间:2012-10-17 17:51:33

标签: ios exception-handling crittercism

我有一个ios应用程序,我已经在使用Crittercism了。它完美地报告了例外情况。

我的问题是我也希望将这些例外记录到我的后端服务器。

我已经尝试了许多事情来实现它,但无济于事。 以下是我尝试的事项列表:

  • 呼叫 NSSetUncaughtExceptionHandler(&myExceptionHandler);

如果我这样做,则Crittercism中不会报告异常。

  • 呼叫 NSSetUncaughtExceptionHandler(&myExceptionHandler);

将异常发送到我的服务器。 然后在myExceptionHandler函数中调用Crittercism的构造函数并重新抛出异常。不起作用。

  • 调用Crittercism的构造函数,然后调用NSSetUncaughtExceptionHandler(&myExceptionHandler);并在myExceptionHandler调用[Crittercism logHandledException:exception];。也不起作用。

  • 在我的异常处理程序中序列化异常对象并将其存储在用户首选项中。当用户重新启动应用程序时,请调用[Crittercism logHandledException:exception];,然后将异常发送到我的后端服务器。问题是,我无法将字符串反序列化为异常对象。我无法将NSString形式的堆栈跟踪放入我的异常对象中。

我本可以尝试的一些事情:

  • 让生物处理异常,然后在下次重启时,将调用crittercismDidCrashOnLastLoad - 但我是否有异常信息,或者我可以从某处访问它。

  • 我可能不需要将字符串反序列化为异常对象。我相信Crittercism也将异常更改为json对象并将此json对象发送到其服务器。但我无法找出使用哪些函数将自定义json对象发送给批评。

有人可以指导我如何继续吗?

2 个答案:

答案 0 :(得分:2)

我找到了解决方法。首先使用

启动生物对象
[Crittercism initWithAppID:crittercismAppID andKey:crittercismKey andSecret:crittercismSecret];

现在定义

NSUncaughtExceptionHandler* crittercismHandler = NSGetUncaughtExceptionHandler();//You have stored the reference to the crittercism function that was going to get called in the event of an exception

然后,

NSSetUncaughtExceptionHandler(&myHandledException);//Set the handler to your custom function

在自定义函数中,对您的异常执行任何操作,然后调用

NSSetUncaughtExceptionHandler(crittercismHandler);//this will re-set the exception handler to the one of crittercism

呼叫

crittercismHandler(exception);//This will send the exception to crittercism servers.

你可以为信号做类似的事情。

答案 1 :(得分:1)

您可以像我们一样管理自己的异常处理。此页面包含指向示例项目的链接 http://www.cocoawithlove.com/2010/05/handling-unhandled-exceptions-and.html

这也很有帮助 Printing a stack trace from another thread