文章目录

当你刚接手一个项目的时候(对代码的内部结构还不清楚),如果出现一些莫名其妙的内存问题,而且也没有错误的log日志,这种问题有时候是比较难定位的,根本就不知道代码哪里出现了问题,今天刚好遇到了一个这样的问题,顺便总结一下。

当对项目中的某一模块进行操作的时候遇到的错误是EXC_BREAKPOINT (code=1, subcode=…)而且没有任何错误log的打印。添加了全局断点还是没有定位到出错代码的位置,这时候就需要对xcode进行一些设置了。

EXC_BRECKPOINT.png

xcode开启僵尸模式,如果遇到The target process has no stack logs. Run it with the MallocStackLogging env这种问题那么可以设置下MallocStackLoggingNoCompact为YES。

zombie

这个时候再对出问题的模块进行操作,会打印出[testViewController retain]message sent to deallocated instance的错误提示,这要就定位到了出问题的大体位置了,并且也知道了是坏内存访问的问题。

但是这个控制器中的代码有上千行,这个时候如何定位呢,既然是内存问题,这里就用到了内存调试工具Zombies了。
打开该工具,运行项目,当出现message sent to deallocated instance时候,工具会提示An Objective-C message was sent to a deallocated object(zombie) at address:0x8b3b200,点击提示,工具会提示可能存在内存问题的地方,然后自己看一下定位的具体代码,就能发现出现问题的地方了。

到这里你就应该定位到出问题代码的位置了,合理的利用调试工具,用助于我们高效率的开发。

今天是1024,程序员的节日,祝大家节日快乐。

参考资料在这里,欢迎大家转载,请注明出处。

文章目录