我在我的应用程序中的main.m中发现应用程序崩溃并且不知道为什么错误发生,因为xcode没有显示崩溃发生的位置,它向我显示它在返回UIApplicationMain时崩溃了(argc,argv。 ..)什么也没告诉我。
有没有办法在Objective-C中使用相当于C ++中的try / catch来查看错误发生的确切位置?
答案 0 :(得分:13)
尽管Objective-C确实有@try
/ @catch
,但它对你没什么帮助。当你到达@catch
时,发生错误的堆栈帧就会消失。
您需要设置在异常时中断的断点:打开断点导航器页面(右起第二个按钮),然后单击[+]在导航器页面的底部。选择“添加异常断点...”,然后单击[完成]。
现在,每当程序抛出异常时,程序就会在调试器中中断。
答案 1 :(得分:8)
我在下面给出了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
}