Objective-C中的Try-Catch等价物

时间:2012-12-08 04:52:49

标签: objective-c

我在我的应用程序中的main.m中发现应用程序崩溃并且不知道为什么错误发生,因为xcode没有显示崩溃发生的位置,它向我显示它在返回UIApplicationMain时崩溃了(argc,argv。 ..)什么也没告诉我。

有没有办法在Objective-C中使用相当于C ++中的try / catch来查看错误发生的确切位置?

3 个答案:

答案 0 :(得分:13)

尽管Objective-C确实有@try / @catch,但它对你没什么帮助。当你到达@catch时,发生错误的堆栈帧就会消失。

您需要设置在异常时中断的断点:打开断点导航器页面(右起第二个按钮),然后单击[+]在导航器页面的底部。选择“添加异常断点...”,然后单击[完成]。

现在,每当程序抛出异常时,程序就会在调试器中中断。

答案 1 :(得分:8)

enter image description here enter image description here

我在下面给出了try catch语法,但除此之外,你可以做的是,在Xcode中,你可以设置断点。在项目资源管理器的左侧,单击“断点”选项卡。在左下角,你会发现一个+。 (上图)点击它,它会给你一个设置异常断点的选项。这将做的是它将停在任何发生崩溃的线路上。你不需要在每个地方设置try catch语句。

@try {

    // Your statements here
 }
 @catch (NSException * e) {
    NSLog(@"Exception: %@", e);
 }
 @finally {
    NSLog(@"finally");
 }

答案 2 :(得分:3)

    //////////////////////ADVANCED TRY CATCH SYSTEM////////////////////////////////////////
    #ifndef UseTryCatch
    #define UseTryCatch 1
    #ifndef UsePTMName
    #define UsePTMName 0  //USE 0 TO DISABLE AND 1 TO ENABLE PRINTING OF METHOD NAMES WHERE EVER TRY CATCH IS USED
    #if UseTryCatch
    #if UsePTMName
    #define TCSTART @try{NSLog(@"\n%s\n",__PRETTY_FUNCTION__);
    #else
    #define TCSTART @try{
    #endif
    #define TCEND  }@catch(NSException *e){NSLog(@"\n\n\n\n\n\n\
    \n\n|EXCEPTION FOUND HERE...PLEASE DO NOT IGNORE\
    \n\n|FILE NAME         %s\
    \n\n|LINE NUMBER       %d\
    \n\n|METHOD NAME       %s\
    \n\n|EXCEPTION REASON  %@\
    \n\n\n\n\n\n\n",strrchr(__FILE__,'/'),__LINE__, __PRETTY_FUNCTION__,e);};
    #else
    #define TCSTART {
    #define TCEND   }
    #endif
    #endif
    #endif
    //////////////////////ADVANCED TRY CATCH SYSTEM////////////////////////////////////////






Use TRY CATCH IN ANY METHOD LIKE THIS


-(void)anyMethodThatCanGenerateException
{
    TCSTART


    TCEND
}