iOS版.当其他代码已经使用NSSetUncaughtExceptionHandler时,我怎么能捕获异常?

iOS版.当其他代码已经使用NSSetUncaughtExceptionHandler时,我怎么能捕获异常?,第1张

概述我想使用全局异常处理程序. 调用applicationdidFinishLaunchingWithOptions: NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler); 并使用它来处理异常: void uncaughtExceptionHandler(NSException *exception) { // handli 我想使用全局异常处理程序.

调用applicationdIDFinishLaunchingWithOptions:

NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);

并使用它来处理异常:

voID uncaughtExceptionHandler(NSException *exception) {        // handling exception}

但我也使用sdk,它已经使用了NSSetUncaughtExceptionHandler.然后我的方法uncaughtExceptionHandler在异常发生时没有调用.

我知道一个app只能是一个处理程序.但我需要它和sdk,这个代码可以处理全局级别的异常.

在这种情况下,您有什么想法我可以使用NSSetUncaughtExceptionHandler吗?或者其他想法如何在全球范围内处理异常?
十分感谢.

解决方法 在SDK NSSetUncaughtExceptionHandler将覆盖处理程序之后调用installUncaughtExceptionHandler().将调用你的uncaughtExceptionHandler.

此外,您可以存储SDK的处理程序,并在uncaughtExceptionHandler中调用它以使SDK协同工作.

示例代码:

static NSUncaughtExceptionHandler *exceptionHandler = NulL;typedef voID (*sighandler_t)(int);static sighandler_t sigHandler = NulL;static voID handleException(NSException *e){    //your code ...    //call the SDK handler    if (exceptionHandler) {        exceptionHandler(e);    }}static voID handleSignal(int signal){    //your code ...    if (sigHandler) {        sigHandler(signal);    }}voID installUncaughtExceptionHandler(){    // store the SDK handler    exceptionHandler = NSGetUncaughtExceptionHandler();    NSSetUncaughtExceptionHandler(&handleException);    sigHandler = signal(SIGABRT,handleSignal);    signal(SIGILL,handleSignal);    signal(SIGSEGV,handleSignal);    signal(SIGFPE,handleSignal);    signal(SIGBUS,handleSignal);    signal(SIGPIPE,handleSignal);}
总结

以上是内存溢出为你收集整理的iOS版.当其他代码已经使用NSSetUncaughtExceptionHandler时,我怎么能捕获异常?全部内容,希望文章能够帮你解决iOS版.当其他代码已经使用NSSetUncaughtExceptionHandler时,我怎么能捕获异常?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1003434.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存