iOS指南系列:如何解决内存问题 深入调试 结尾篇
iOS指南系列:如何解决奔溃问题
iOS指南系列:如何解决奔溃问题-关于内存访问
iOS指南系列:如何解决奔溃问题-关于内存访问续
iOS指南系列:如何解决奔溃问题-关于内存访问续
iOS指南系列:如何解决奔溃问题-深入调试
iOS指南系列:程序运行非我所设想:tableview
iOS指南系列:如何解决内存问题 深入调试 结尾篇
Zombies!
接着上次修改后的程序,运行下,还是crash,关于内存的 EXC_BAD_ACCESS ,幸运的是调试器直接定位了代码行tableView:cellForRowAtIndexPath:
EXC_BAD_ACCESS 奔溃表明在你的代码中内存管理存在问题. 和SIGABRT 错误不一样, 很难得到明确的信息提示. 然而在这里,调试器确实有些选项可以帮助你检查内存问题(bingo,正如译者之前所言,也有类似的page guard等调试选项,帮助内存问题尽早暴露): Zombies!
打开 scheme editor 针对特定project的(也可以从菜单product):
选择Run action, 然后选 Diagnostics tab. 启用Enable Zombie Objects box:
运行程序command+R, 程序奔溃,得到如下信息 :
我们来检查下list的初始化分配代码?initWithCoder:?目前是这样的:
?这个问题通过断点以及连续调试,很容易得到结论,前几个cell没有问题,直到最后一个cell
按继续执行程序“按钮数次。在某一点上,应用程序崩溃,提示以下消息:
这样,程序就完全好了么?well,几乎是的,但当我swap某个cell(无论左右/右左),出现删除按钮后,点击会出现crash,断在代码tableView:commitEditingStyle:forRowAtIndexPath:.
The error message is:
以上的原文总结非常好,翻译过来肯定不到位!
开开心心debugging! :-]
译者总结:
1.zoombie是有用的,但最终版本一定要disable(这个设置是项目级别的),否则程序性能问题
2.po ¥eax po variableSymbol p variablesymbol 基本的llbg调试指令:例如c
3.target build settings使用static analyzer来帮助分析代码潜在问题