• EXC_BAD_ACCESS & NSZombieEnabled & 设置Global Breakpoint定位错误代码所在位置


    如何调试EXC_BAD_ACCESS

    文章分类:移动开发 关键字: exc_bad_access 原文地址:http://www.codza.com/how-to-debug-exc_bad_access-on-iphone

    当程序出现“EXC_BAD_ACCESS”时,就像不解风情的妻子对你说:“亲爱的,今晚不行”。这两种情况都是非常不幸的。

    让我们先看看EXC_BAD_ACCESS到底是什么。

    向已经释放的对象发送消息时会出现EXC_BAD_ACCESS。当出现错误时,通常会调用堆栈信息,特别是在多线程的情况下。

    怎样提供一个dummy,当释放一个对象导致程序终止时,在堆栈上告诉我们错误信息,好,下面我们将告诉你怎么去做。

    如果你设置了NSZombiEnabled环境变量,当销毁一个对象时,objective的运行时环境会在这个对象后边设置一个dummy,当 调用这个对象的方法时,程序会终止,并在堆栈上显示错误信息,下边教你怎么设置NSZombiEnabled

    首先,在Xcode中打开executables


    查看其中内容的信息。
    然后,打开信息面板中的Arguments面板


    点击左下角的加号,添加变量NSZombiEnabled,并将变量的值设置为YES。
    重新运行程序,当过度释放对象时,会在控制台上出现如下信息:
    2009-03-30 02:30:36.172 ninjaJumper[3997:20b] *** -[GameLayer retain]: message sent
    to deallocated instance 0x59bf670

    说明想GameLayer的一个对象发送了retain消息

    查看堆栈信息:


    如何查看:http://lovebirdegg.javaeye.com/blog/550489

    当问题解决后,要将NSZombieEnabled设置为无效,不需要删除变量,将变量前的对号去掉就可以了:

    设置Global Breakpoint定位错误代码所在位置

    文章分类:移动开发
    调式程序的时候经常为了出了错误而不知道原因在哪头疼,可以通过设置XCode的Global Breakpoint快速定位错误代码的位置
    步骤一:
    Run–>Show–>Breakpoints,进入断点窗口




    步骤二:
    为-[NSException raise]设置断点
    选择Global Breakpoints, 双击Double-click for Symbol, 输入-[NSException raise],然后按回车。




    步骤三:
    按照上面的步骤添加objc_exception_throw

    以上步骤做完,程序出错的时候就可以定位到问题代码了

    当程序出现问题时打开Debugger画面:



    点击控制台左边那个按钮,或Run->Debugger会出现如下画面:




    在左上角的窗口下出错的方法会加黑,如-[PlayGameViewController gameloop]
    单击加黑的方法,程序就回跳转到出错的位置
  • 相关阅读:
    java在线学习-mybatis的缓存类及作用
    java架构师学习路线-MyBatis中的一些概念
    java架构师学习路线-Mybatis中单例模式的介绍
    java架构师学习路线-Mybatis中Builder模式的介绍
    竞赛图中三元环的期望个数
    求一个点前面第一个大于等于当前值的位置
    CF623D Birthday
    联赛模拟测试33
    网络流
    联赛模拟测试32
  • 原文地址:https://www.cnblogs.com/mac_arthur/p/1708364.html
Copyright © 2020-2023  润新知