我需要在我发布到其他应用程序的静态库中实现崩溃报告。为此,我将自己注册为NSUncaughtExceptionHandler
NSSetUncaughtExceptionHandler(HsWatchdogUncaughtExceptionHandler);
signal(SIGABRT, SignalHandler);
signal(SIGILL, SignalHandler);
signal(SIGSEGV, SignalHandler);
signal(SIGFPE, SignalHandler);
signal(SIGBUS, SignalHandler);
signal(SIGPIPE, SignalHandler);在此之前,我还使用UncaughtExceptionHandler保存了对前一个NSGetUncaughtExceptionHandler()的引用。
由于许多使用我的库的应用程序也有自己的崩溃报告机制(通常是Crashlytics),所以我需要我的库很好地发挥作用。
我计划做的是,在我的exceptionHandler与NSException一起调用之后,我想将它传递给‘以前的UncaughtExceptionHandler’。
这是否有效:
self.previousUncaughtExceptionHandler(exception);发布于 2015-09-01 11:53:00
声明一个变量来存储上一个处理程序
static NSUncaughtExceptionHandler *_previousHandler;首先获取前一个处理程序并将其存储在全局中:
_previousHandler = NSGetUncaughtExceptionHandler();然后创建您自己的处理程序:
void onException(NSException * exception) {
// do what you want to do ... then call the previous handler
_previousHandler(exception);
}将其设置为未指定的异常处理程序:
NSSetUncaughtExceptionHandler(&onException)发布于 2017-07-01 18:54:10
看到这一点,它已经有几年的历史了,但我不确定实现您自己的异常处理程序是否受支持或是否会工作。这真的取决于第三方图书馆如何实施他们的支持。但是两个较大的第三方库(HockeyApp和Crashlytics)建议不要与它们的库一起实现您自己的异常处理程序。https://support.hockeyapp.net/discussions/problems/34639-exception-reason-text-is-missing-in-crash-reports
https://support.hockeyapp.net/discussions/problems/11409-hockeyapp-does-not-generate-crash-report "2.有一个uncaughtExceptionHandler实现捕捉异常,请验证代码中不存在这样的方法。
Is it safe to use NSSetUncaughtExceptionHandler with Fabric?“在iOS上有两个UncaughtExceptionHandlers是不受支持的,也不推荐使用。“您应该只在iOS上使用一个未指定的异常处理程序,我个人不推荐您正在讨论的方法”
领域团队讨论如何将句柄与第三方库结合使用,因此如果您决定这样做,您可能会看到它们是如何实现的。https://github.com/realm/realm-cocoa/issues/3822
https://stackoverflow.com/questions/32330395
复制相似问题