objective-c – 在Mac Cocoa应用程序中管理未处理的异常和崩溃

objective-c – 在Mac Cocoa应用程序中管理未处理的异常和崩溃,第1张

概述我正在实施一个Mac App,我想处理以下事件: >未处理的例外 >程序崩溃(内存错误dcc) 如果我检测到它们,我可以向我发送详细信息,以便使用我发现的Crash Handlers之一来分析和修复错误.唉,我无法弄清楚如何拦截崩溃和异常. >第一个问题:我是否要将例外与崩溃区分开来?或者检测Exception就足够了? >如何捕获异常和/或崩溃将它们重定向到我的处理程序? PS 我试着在我的My 我正在实施一个Mac App,我想处理以下事件:

>未处理的例外
>程序崩溃(内存错误dcc)

如果我检测到它们,我可以向我发送详细信息,以便使用我发现的Crash Handlers之一来分析和修复错误.唉,我无法弄清楚如何拦截崩溃和异常.

>第一个问题:我是否要将例外与崩溃区分开来?或者检测Exception就足够了?
>如何捕获异常和/或崩溃将它们重定向到我的处理程序?

PS
我试着在我的MyApp课程中关注

NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);signal(SIGABRT,SignalHandler);signal(SIGILL,SignalHandler);signal(SIGSEGV,SignalHandler);signal(SIGFPE,SignalHandler);signal(SIGBUS,SignalHandler);signal(SIGPIPE,SignalHandler);

但它不起作用.每次崩溃时,它都会进入调试器而不对SignalHandler或uncaughtExceptionHandler进行分类

解决方法 我发现最好的方法是创建一个简单的异常处理委托类,因为这样可以捕获IBAction方法中的异常.

main.mm:

@interface ExceptionDelegate : NSObject@endstatic ExceptionDelegate *exceptionDelegate = nil; int main(int argc,char **argv){    int retval = 1;    @autoreleasepool    {        //        // Set exception handler delegate        //        exceptionDelegate = [[ExceptionDelegate alloc] init];        NSExceptionHandler *exceptionHandler = [NSExceptionHandler defaultExceptionHandler];        exceptionHandler.exceptionHandlingMask = NSLogAndHandleEveryExceptionMask;        exceptionHandler.delegate = exceptionDelegate;        //        // Set signal handler        //        int signals[] =        {            SIGQUIT,SIGILL,SIGTRAP,SIGABRT,SIGEMT,SIGFPE,SIGBUS,SIGSEGV,SIGSYS,SIGPIPE,SIgalRM,SIGXcpu,SIGXFSZ        };        const unsigned numSignals = sizeof(signals) / sizeof(signals[0]);        struct sigaction sa;        sa.sa_sigaction = signalHandler;        sa.sa_flags = SA_SIGINFO;        sigemptyset(&sa.sa_mask);        for (unsigned i = 0; i < numSignals; i++)            sigaction(signals[i],&sa,NulL);        ....    }    ....    return retval;    }static voID signalHandler(int sig,siginfo_t *info,voID *context){    logerr(@"Caught signal %d",sig);    exit(102);}@implementation ExceptionDelegate- (BOol)exceptionHandler:(NSExceptionHandler *)exceptionHandler      shouldLogException:(NSException *)exception                    mask:(unsigned int)mask{    logerr(@"An unhandled exception occurred: %@",[exception reason]);   return YES;}- (BOol)exceptionHandler:(NSExceptionHandler *)exceptionHandler   shouldHandleException:(NSException *)exception                    mask:(unsigned int)mask{    exit(101);    // not reached    return NO;}@end

您需要将ExceptionHandling.framework添加到项目中.

总结

以上是内存溢出为你收集整理的objective-c – 在Mac Cocoa应用程序中管理未处理的异常和崩溃全部内容,希望文章能够帮你解决objective-c – 在Mac Cocoa应用程序中管理未处理的异常和崩溃所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/web/1001062.html

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

发表评论

登录后才能评论

评论列表(0条)

保存