`
modun
  • 浏览: 149918 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

用NSZombieEnabled解决恼人的EXC_BAD_ACCESS错误

    博客分类:
  • IOS
阅读更多

转自:http://www.cocoachina.com/iphonedev/sdk/2011/0626/2980.html

 

 有时开发者会遇到这样的问题:程序突然Crash,出现EXC_BAD_ACCESS错误。但是不是每次都Crash,Debug时最终基本停在objc-msgsend这里,十分令人费解。

    首先解释下EXC_BAD_ACCESS,当你向已经释放的对象发送消息时就会出现这种错误。

    至于NSZombieEnabled,就是当设置NSZombieEnabled环境变量后,一个对象销毁时会被转化为_NSZombie,个人感 觉和线程的那几个状态有些相似,设置NSZombieEnabled后,当你向一个已经释放的对象发送消息,这个对象就不会向之前那样Crash或者产生 一个难以理解的行为,而是放出一个错误消息,然后以一种可预测的可以产生debug断点的方式消失(原文是die),因此我们就可以找到具体或者大概是哪 个对象被错误的释放了。

    设置NSZombieEnabled的方法如下

  1. 在XCode左边那个Groups & Files栏中找到Executables,双击其中的一项,或者右键Get Info;
  2. 切换到Arguments
  3. 这里一共有两个框,在下面那个Variables to be set in the environment:点+号添加一项,Name里填NSZombieEnabled,Value填Yes,要保证前面的钩是选中的。

    好了,赶紧去找哪里出了问题吧,至于取消NSZombieEnabled,就是吧刚才提到的那个钩取消即可。

    最后总结一下感想,首先是我对EXC_BAD_ACCESS这个错误还没有足够的认识,其次是我没有尽快的去搜索一下解决方法,这两点导致我浪费了大量时间做各种各样奇怪的调试。幸好现在解决了,可以继续工作了。

分享到:
评论

相关推荐

    查找 EXC_BAD_ACCESS 问题根源的方法

    当出现 EXC_BAD_ACCESS 错误时,可以在终端中使用 `malloc_history` 命令来查看相关对象的内存分配历史记录。 - **命令格式**:`malloc_history ${App_PID} ${Object_instance_addr}` - **示例**:根据之前的...

    ios EXC_BAD_ACCESS错误调试

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

    iOS内存错误EXC_BAD_ACCESS的解决方法

    在iOS开发中,遇到“EXC_BAD_ACCESS”错误是一个常见的挑战,这种错误通常与内存管理问题有关,尤其是对象的过度释放或访问已被释放的内存。本文将深入探讨如何解决这类问题。 首先,理解“EXC_BAD_ACCESS”错误的...

    如何在xcode里面使用内存泄露查找工具

    6. 当发生内存错误时,比如EXC_BAD_ACCESS,可通过设置环境变量NSZombieEnabled来找出尝试向已经释放的对象发送消息的错误。在Xcode中,可以在运行应用的Schema设置中,将NSZombieEnabled环境变量设置为YES。这允许...

    使用Xcode和Instruments调试解决iOS内存泄露

    这里讲述在没有ARC的情况下,如何使用Instruments来查找程序中的内存泄露,以及NSZombieEnabled设置的使用。本文假设你已经比较熟悉Obj-C的内存管理机制。实验的开发环境:XCode4.5.2先下载一个实现准备好的内存泄露...

    解决iOS7 UIBarButtonItem右移错位问题.

    - 示例代码中提到了一个调试技巧,即通过设置环境变量`NSZombieEnabled`为`YES`,可以在程序崩溃时提供更多关于内存错误的信息,这对于定位和解决复杂的内存管理问题非常有帮助。 - **NSLog格式化输出**: - 示例...

    iOS内存暴增问题追查与使用陷阱

    在XCode中,我们可以添加NSZombieEnabled标记位来让系统把错误地址打印出来。这可以帮助我们快速定位到崩溃的原因。例如,在上面的代码中,崩溃的原因是`message sent to deallocated instance 0x7179910`。 三、...

    NSZombie:苹果公司对NSZombie的实现

    通过使用这些资源,开发者可以更好地理解如何在出现问题时利用NSZombie来识别和修复内存管理错误。这包括学习如何读取和解析NSZombie引发的异常信息,以及如何根据这些信息调整代码以避免发送消息给已释放的对象。...

    Secrets Of An iPhone Developer .pps

    NSZombieEnabled Xcode 3.2 Errors / Warnings Xcode 3.2 Static Analyzer Demo ---App Development--- Provisioning Profile tips iTunes Connect App Submission Tips Analytics tracking Score / Networking ...

    60个免费工具下载

    免费工具的出现为解决这些问题提供了可能。它们不仅能够帮助开发者节省成本,还能提升项目的整体质量。因此,了解并熟练运用这些免费工具是非常重要的。 ### 二、自动化工具的意义 在移动开发中,自动化工具扮演着...

Global site tag (gtag.js) - Google Analytics