`
jiapumin
  • 浏览: 344828 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

exc_bad_access(code=1, address=0x789870)野指针错误,假死debug状态

 
阅读更多

错误原因:

exc_bad_access(code=1, address=0x789870)野指针错误,主要的原因是,当某个对象被完全释放,也就是retainCount,引用计数为0后。再去通过该对象去调用其它的方法就会出现野指针错误。

例如:

Person *jerry = [[Person alloc]init]; // retainCount引用计数为1

[jerry eat]; // 调用吃的方法

[jerry release]; // 释放jerry这个对象到 retainCount引用计数为0

 

// 此时如果继续引用jerry这个对象就会出现野指针错误,exc_bad_access

[jerry sleep];

 

解决方法:

首先得定位到哪里出现的这样野指针引用错误,如果是大型的项目代码量一大,找起来是非常痛苦的。

IOS提供了一个环境变量设置来帮忙定位错误位置的信息描述:NSZombieEnabled ,就是当 设置NSZombieEnabled环境变量后,一个对象销毁时会被转化为_NSZombie,设置NSZombieEnabled后,当你向一个已经释 放的对象发送消息,这个对象就不会向之前那样Crash或者产生一个难以理解的行为,而是放出一个错误消息,然后以一种可预测的可以产生debug断点的 方式消失, 因此我们就可以找到具体或者大概是哪个对象被错误的释放了。

例如会出现这样的提示:

[jerry sleep]:message sent to deallocated instance 0x78d7ed0

设置NSZombieEnabled环境变量,XCode4中:

你可以点击 Xcode4 菜单 Product -> Edit Scheme-> Arguments, 然后将点击”加号”, 将 NSZombieEnabled 参数加到Environment Variables 窗口中, 后面的数值写上 ”YES”.

或者在 Xcode4 菜单 Product -> EditScheme -> Diagnostics 设置窗口中直接勾上Enable ZombieObjects 即可,Xcode 可用 cmd+shift+< 进到这个窗口。



 

 
 
  • 大小: 72.3 KB
分享到:
评论

相关推荐

    iOS内存错误EXC_BAD_ACCESS的解决方法

    首先说一下 EXC_BAD_ACCESS 这个错误,可以这么说,90%的错误来源在于对一个已经释放的对象进行release操作。举一个简单的例子来说明吧,首先看一段Java代码: 代码如下:public class Test{ public static void ...

    查找EXC_BAD_ACCESS的错误代码处

    ### 查找EXC_BAD_ACCESS错误代码处:利用Instrument工具定位问题 #### 一、引言 在软件开发过程中,特别是iOS应用开发中,经常会遇到难以捉摸的内存管理问题,其中最常见的之一就是`EXC_BAD_ACCESS`错误。这种类型...

    查找 EXC_BAD_ACCESS 问题根源的方法

    ### 查找 EXC_BAD_ACCESS 问题根源的方法 #### 一、EXC_BAD_ACCESS 错误简介 EXC_BAD_ACCESS 是一种常见的 Objective-C 编程错误,通常发生在试图访问已释放或未分配的内存时。这类错误往往难以追踪,因为它们可能...

    ios EXC_BAD_ACCESS错误调试

    当程序尝试访问一个已经释放的对象时,系统就会抛出EXC_BAD_ACCESS错误,这在C语言中通常被理解为使用了野指针。由于内存访问错误可能会导致应用程序崩溃,因此快速准确地定位这类问题是每个iOS开发者必须掌握的技能...

    关于出现僵尸信号SIGBAT或者EXC_BAD_ACCESS的解决方案

    标题中的“僵尸信号SIGABRT或EXC_BAD_ACCESS”是iOS开发中常见的错误类型,主要与内存管理和对象生命周期有关。这两个错误通常出现在Objective-C或Swift编程中,涉及到内存泄漏、过早释放对象或者试图访问已经释放的...

    db2exc_975_WIN_x86.exe

    db2exc_975_WIN 数据库安装包,官网下载,亲测可用。 IBM DB2 是一套关系型数据库管理系统,DB2 Express - C

    db2exc_970_LNX_x86_64.tar.z01

    db2exc_970_LNX_x86_64.tar.gz Linux 64位系统 的db2 安装包。(第一部分)

    db2exc_970_LNX_x86_64.tar.zip

    db2exc_970_LNX_x86_64.tar.gz Linux 64位系统 的db2 安装包。(第二部分) 另一部分:https://download.csdn.net/download/qq_37570669/11260296

    ad7745 AD7746电容检测芯片I2C接口 C51单片机驱动程序源代码.zip

    ad7745 AD7746电容检测芯片I2C接口 C51单片机驱动... flag_exc=SETUP_7746(0X09,0X0B); flag_config=SETUP_7746(0x0a,0xa2); flag_capdac=SETUP_7746(0x0b,0x7f); key_init(); __enable_interrupt(); //开启总中

    Python使用sys.exc_info()方法获取异常信息

    ### Python使用`sys.exc_info()`方法获取异常信息 在Python编程过程中,正确处理异常是非常重要的。这不仅能提高程序的健壮性,还能帮助开发者更好地理解并解决遇到的问题。`sys.exc_info()`方法是Python中用于获取...

    LiveSendGift:直播发送弹幕效果

    重要信息2017年09月25日18:42:00 修复了在iOS11下必现EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)的崩溃BUG。已知bug提示:在替换模式LiveGiftAddModeReplace下使用animatedWithGiftModel方法将导致UI...

    code_file_exc_电磁波_

    这个"code_file_exc_电磁波_"的压缩包文件很可能包含了一系列用于进行电磁波时域有限元分析的代码,帮助我们理解和模拟电磁波的行为,确保波形的准确性和不失真性。 时域有限元方法(Finite Element Method, FEM)...

    inh-exc_neuron_oscillation_

    标题“inh-exc_neuron_oscillation_”暗示了我们正在探讨神经网络中抑制性与兴奋性神经元之间的交互,特别是关于它们如何引发振荡的现象。描述中的“excitatory neuron connection”进一步指出了兴奋性神经元间的...

    将ADO数据转换到EXCEL的代码.rar_ado EXC_ado excel_excel ado

    首先,ADO提供了一种灵活的方式来连接和操作各种数据源,包括SQL Server、Access、Oracle等。它通过记录集(Recordset)对象作为数据访问的主要接口,记录集可以看作是数据库中的一张表或查询结果的动态视图。 1. ...

    Data_Extract_src.zip_Excel数据提取_VB_VB提取excel数据_extract exc_提取exce

    标题 "Data_Extract_src.zip_Excel数据提取_VB_VB提取excel数据_extract exc_提取excel" 描述了一个使用VB.NET编程语言编写的程序,该程序能够自动从Excel文件中提取数据。这个项目可能是一个实用工具,帮助用户快速...

    DB2_V9.7在linux上安装教程

    1、tar -xzvf db2exc_nlpack_970_LNX_x86.tar.gz 得到文件夹nlpack 2、tar -xzvf v9.7_linuxia32_server.tar.gz 得到文件夹server 二、 语言包整合 cp -r nlpack/* ./server/ 三、 安装 1、cd server 2、sudo ./...

    如何dump coredump to AT port

    print_hsl1("EXC_RET=0x%08x\n\r", taskContext.exc_return); if ((taskContext.exc_return & 0x10) == 0) { for (i = 0; i &lt;= 31; i++) { print_hsl2("s%-2d=0x%08x\n\r", i, *(&taskContext.s0 + i)); } }...

    Python with语句用法原理详解

    with 用法理解 Overview with 与with之后的object一起,起到了抛出异常和单独... def __exit__(self, exc_type, exc_val, exc_tb): print('exit') if __name__ == '__main__': a = A() with a: print('first st

Global site tag (gtag.js) - Google Analytics