首页 > 其他分享 >XCode 调试1

XCode 调试1

时间:2023-06-22 11:32:53浏览次数:39  
标签:EXC XCode ACCESS BAD NSZombieEnabled 调试 MallocStackLogging

当你向已经释放的对象发送消息时就会出现错误: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;

XCode 调试1_环境变量

XCode 调试1_hive_02

注意:

1、以上选项只能在模拟器上有效,如果你改变了iOS的版本,需要重新设定。 

2、调试结束后,最好记得把环境变量NSZombieEnabled,MallocStackLogging前面的勾去掉,因为它们会使得内存不会被释放.

3、在debug过程中,你可能发现启用NSZombieEnabled后,程序不再crash,而一旦去掉NSZombieEnabled,程序再次crash。此时NSZombieEnabled已经无法解决你的问题,只能遵照内存管理原则仔细查找问题出处,至于这种问题的产生原因,个人认为可能是NSZombieEnabled在一定程度上延长了一个object的生命周期,而延长的这段时间恰好突破了EXC_BAD_ACCESS的临界点,从而避免了EXC_BAD_ACCESS的发生。

XCode4 还可以在下面来设置

XCode 调试1_hive_03

 

参考资料:

设置NSZombieEnabled和MallocStackLogging

查找 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调试相关小结


标签:EXC,XCode,ACCESS,BAD,NSZombieEnabled,调试,MallocStackLogging
From: https://blog.51cto.com/u_15588078/6534487

相关文章

  • XCode 4.3.2 如何新建 Window-based Application应用的简单例子
    XCode4以后,项目模版中没有了Window-basedApplication,跟它比较接近的项目模版是EmptyApplication.如下图的选择:我们想建一个Window-basedApplication,需要在EmptyApplication基础上做一些设置。下面是操作步骤,新建一个EmptyApplication默认的EmptyApplication项目包......
  • 每次调试打印日志都很头痛
    引子当代码的运行效果不符合预期时就得进行调试,排查下整个数据链路上到底是哪个环节出了问题。断点调试当然是首选,因为它可以单步执行程序,并查看当前执行步骤中所有的数据值。但有些场景下,断点调试就显得笨拙。比如大量异步并发的场景,当程序不是线性执行而是跳来跳去时,就会发生你期......
  • ethercat调试
    1.日鼎伺服无法上电状态字始终是0x2306041状态字(官方手册P50)bit15bit14bit13bit12bit11bit10bit9bit8bit7bit6bit5bit4bit3bit2bit1bit0厂家自定义特殊的运行模式内部限制行为目标到达远程参数厂家自定义报警开机去使能急停上电使能故障运行使能开机准备开机......
  • 使用XDebug进行PHP调试
    步骤1、获取Xdebug,下载地址,根据你的操作系统情况,选择合适的下载:http://xdebug.org/download.php 假设下载后的文件为:php_xdebug.dll 2、加载PHP的这个插件以WAMPSERVER为例,我是把它装在D:\wamp\目录下,我就需要把php_xdebug.dll文件拷贝到D:\wamp\bin\php\php5.3.0\ext......
  • Android强大的原生调试工具adb的常用命令
    ADB简介ADB(AndroidDebugBridge)是用于与Android设备进行通信和调试的命令行工具。以下是一些常用的ADB调试命令:常用命令列出链接的设备adbdevices:列出连接到计算机的Android设备列表。可以看到这里我连接了两个设备。进入设备的shell环境adbshell:进入设备的命令行shell......
  • Xcode 14.3.1 (14E300c) 下载 - Apple 平台 IDE
    Xcode14.3.1(14E300c)下载-Apple平台IDECommandLineToolsforXcode14,tvOS16&watchOS9SimulatorRuntime请访问原文链接:https://sysin.org/blog/apple-xcode-14/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgXcode14包含了在所有Apple平台上......
  • 断点调试
    http://iosdevelopertips.com/xcode/xcode-tip-breakpoints-have-so-much-more-to-offer-than-simply-stopping-on-a-line.htmlhttp://blog.bignerdranch.com/4247-xcode-breakpoint-wizardry/http://lldb.llvm.org/tutorial.html......
  • 蒂森MC2_B系统调试软件 蒂森MC2_B系统调试软件
    蒂森MC2_B系统调试软件蒂森MC2_B系统调试软件ID:691499602184177255......
  • uniapp 无线调试
    uniapp无线调试1、下载adb工具https://developer.android.google.cn/studio/releases/platform-tools?hl=zh-cn2、解压放到Hbuilder的adbs文件夹里HBuilder/plugins/launcher/tools/adbs3、进入解压后的文件夹cmd打开命令行4、使用配对码配对 adbpair adbpair 19......
  • 贴膜机程序(MCGS触摸屏+4台欧姆龙CP1H+2台雅马哈机械手臂+4台定位相机)程序注释详细,此
    贴膜机程序(MCGS触摸屏+4台欧姆龙CP1H+2台雅马哈机械手臂+4台定位相机)程序注释详细,此程序己上机调试OK,内容不包括机械手程序和工控机程序(供参考交流),此程序主要涉及内容(用小型机代替中型机,较省成本的一种选型方式):1,一屏多机2,pLC之间pcLINK通讯(可带12台伺服电机)仅供参考延申......