zoukankan      html  css  js  c++  java
  • XCode 调试1

    当你向已经释放的对象发送消息时就会出现错误:EXC_BAD_ACCESS。
    当我们执行时 Xcode 一出错,却是定位在我在 AppDelegate 的 application:didFinishLaunchingWithOptions: 方法上的某行了,如果代码量多了,要查找具体问题非常难,但凭经验了。
    不过NSZombieEnabled 环境变量可以帮我们的忙,就是当设置NSZombieEnabled环境变量后,一个对象销毁时会被转化为_NSZombie,设置NSZombieEnabled后,当你向一个已经释放的对象发送消息,这个对象就不会向之前那样Crash或者产生一个难以理解的行为,而是放出一个错误消息,然后以一种可预测的可以产生debug断点的方式消失, 因此我们就可以找到具体或者大概是哪个对象被错误的释放了。 
    设置 NSZombieEnabled 和 MallocStackLogging 的位置如下:XCode4
    1.点击XCode的Product菜单,选择Edit Scheme...选项
    2.选择左侧的Run...,右边点击Arguments
    3.在Environment Variables栏里,添加NSZombieEnabled,value为YES;再添加MallocStackLogging,value为YES;
    注意:
    1、以上选项只能在模拟器上有效,如果你改变了iOS的版本,需要重新设定。 
    2、调试结束后,最好记得把环境变量NSZombieEnabled,MallocStackLogging前面的勾去掉,因为它们会使得内存不会被释放.
    3、在debug过程中,你可能发现启用NSZombieEnabled后,程序不再crash,而一旦去掉NSZombieEnabled,程序再次crash。此时NSZombieEnabled已经无法解决你的问题,只能遵照内存管理原则仔细查找问题出处,至于这种问题的产生原因,个人认为可能是NSZombieEnabled在一定程度上延长了一个object的生命周期,而延长的这段时间恰好突破了EXC_BAD_ACCESS的临界点,从而避免了EXC_BAD_ACCESS的发生。
    XCode4 还可以在下面来设置
     
    参考资料:
    设置NSZombieEnabled和MallocStackLogging
    http://www.cnblogs.com/xiaodao/archive/2012/02/14/2350635.html
    查找 EXC_BAD_ACCESS 问题根源的方法
    http://www.cocoachina.com/macdev/objc/2011/0219/2661.html
    iPhone 调试相关
    http://wangjianlewo.blog.163.com/blog/static/17656805120123130659767/
    用NSZombieEnabled解决恼人的EXC_BAD_ACCESS错误
    http://longtimenoc.com/archives/%E7%94%A8nszombieenabled%E8%A7%A3%E5%86%B3%E6%81%BC%E4%BA%BA%E7%9A%84exc_bad_access%E9%94%99%E8%AF%AF

    Xcode调试相关小结
    http://www.cnblogs.com/v2m_/archive/2011/10/21/2220251.html
  • 相关阅读:
    k3 cloud套打模板中出现单元格数据为空的情况,及无法正确的选择数据源
    k3 cloud中列表字段汇总类型中设置了汇总以后没有显示出汇总值
    k3 cloud查看附件提示授予目录NetWorkService读写权限
    k3 cloud中提示总账期末结账提示过滤条件太长,请修改此过滤条件
    金蝶云k3 cloud采购入库单校验日期不通过
    C# Code First 配置(二)
    C# Azure 远程调试
    C# ABP源码详解 之 BackgroundJob,后台工作(一)
    C# 在webapi项目中配置Swagger(最新版2017)
    高并发之
  • 原文地址:https://www.cnblogs.com/ghj1976/p/2538318.html
Copyright © 2011-2022 走看看