剑客
关注科技互联网

访问坏内存Bug定位解决

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

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

访问坏内存Bug定位解决

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

访问坏内存Bug定位解决

这个时候再对出问题的模块进行操作,会打印出 [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 ,点击提示,工具会提示可能存在内存问题的地方,然后自己看一下定位的具体代码,就能发现出现问题的地方了。

访问坏内存Bug定位解决

访问坏内存Bug定位解决

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

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

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

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址