热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Objective-C中的Try-Catch等价物-Try-CatchequivalentinObjective-C

Igetanappcrashinmain.minmyappandhavenoideawhytheerrorishappeningbecausexcodedoe

I get an app crash in main.m in my app and have no idea why the error is happening because xcode doesn't show me where the crash occurs, it shows me that it crashes at return UIApplicationMain(argc, argv ...) which tells me nothing.

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

Is there a way to have in Objective-C the equivalent of a try/catch in C++ to see exactly where the error is occuring?

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

3 个解决方案

#1


13  

Although Objective-C does have an @try/@catch, it is not going to help you much. By the time you get to the @catch, the stack frame where the error happens would be gone.

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

What you need is to set up a breakpoint that breaks on exception: open the Breakpoint Navigator page (the second button from the right), and click [+] at the bottom of the navigator page. Choose "Add Exception Breakpoint...", then click [Done].

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

Now the program is going to break in the debugger each time that your program throws an exception.

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

#2


8  

enter image description here enter image description here

I gave the try catch syntax below, but in addition to that, what you can do is that, in Xcode, you can set breakpoints. In the left hand side on your project explorer, click on Breakpoints tab. At the bottom left, you will find a +. (pictures above) Click on that and it will give you an option to set exception breakpoint. What this will do is that it will stop at any line where there is a crash. You there fore need not set try catch statements every where.

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

@try {

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

#3


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
}

推荐阅读
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • Netty源代码分析服务器端启动ServerBootstrap初始化
    本文主要分析了Netty源代码中服务器端启动的过程,包括ServerBootstrap的初始化和相关参数的设置。通过分析NioEventLoopGroup、NioServerSocketChannel、ChannelOption.SO_BACKLOG等关键组件和选项的作用,深入理解Netty服务器端的启动过程。同时,还介绍了LoggingHandler的作用和使用方法,帮助读者更好地理解Netty源代码。 ... [详细]
  • 本文详细介绍了Android中的坐标系以及与View相关的方法。首先介绍了Android坐标系和视图坐标系的概念,并通过图示进行了解释。接着提到了View的大小可以超过手机屏幕,并且只有在手机屏幕内才能看到。最后,作者表示将在后续文章中继续探讨与View相关的内容。 ... [详细]
  • PHP反射API的功能和用途详解
    本文详细介绍了PHP反射API的功能和用途,包括动态获取信息和调用对象方法的功能,以及自动加载插件、生成文档、扩充PHP语言等用途。通过反射API,可以获取类的元数据,创建类的实例,调用方法,传递参数,动态调用类的静态方法等。PHP反射API是一种内建的OOP技术扩展,通过使用Reflection、ReflectionClass和ReflectionMethod等类,可以帮助我们分析其他类、接口、方法、属性和扩展。 ... [详细]
  • Iamworkingonaprojectwhichrequiresopentokandcallkitfornotifyingusers.However,theappli ... [详细]
  • iOS开发Debug和Release的理解
    2019独角兽企业重金招聘Python工程师标准参考:http:blog.csdn.netmad1989articledetails406580331&# ... [详细]
author-avatar
手机用户2602918637
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有