首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

iOS指南系列:怎么解决内存有关问题 深入调试 结尾篇

2014-04-25 
iOS指南系列:如何解决内存问题 深入调试 结尾篇iOS指南系列:如何解决奔溃问题iOS指南系列:如何解决奔溃问

iOS指南系列:如何解决内存问题 深入调试 结尾篇

iOS指南系列:如何解决奔溃问题

iOS指南系列:如何解决奔溃问题-关于内存访问

iOS指南系列:如何解决奔溃问题-关于内存访问续

iOS指南系列:如何解决奔溃问题-关于内存访问续

iOS指南系列:如何解决奔溃问题-深入调试

iOS指南系列:程序运行非我所设想:tableview

iOS指南系列:如何解决内存问题 深入调试 结尾篇

Zombies!

接着上次修改后的程序,运行下,还是crash,关于内存的 EXC_BAD_ACCESS ,幸运的是调试器直接定位了代码行tableView:cellForRowAtIndexPath:

iOS指南系列:怎么解决内存有关问题 深入调试 结尾篇

EXC_BAD_ACCESS 奔溃表明在你的代码中内存管理存在问题. 和SIGABRT 错误不一样, 很难得到明确的信息提示. 然而在这里,调试器确实有些选项可以帮助你检查内存问题(bingo,正如译者之前所言,也有类似的page guard等调试选项,帮助内存问题尽早暴露): Zombies!

打开 scheme editor 针对特定project的(也可以从菜单product):

iOS指南系列:怎么解决内存有关问题 深入调试 结尾篇

选择Run action, 然后选 Diagnostics tab. 启用Enable Zombie Objects box:

iOS指南系列:怎么解决内存有关问题 深入调试 结尾篇

运行程序command+R, 程序奔溃,得到如下信息 :

我们来检查下list的初始化分配代码?initWithCoder:?目前是这样的:

?这个问题通过断点以及连续调试,很容易得到结论,前几个cell没有问题,直到最后一个cell

按继续执行程序“按钮数次。在某一点上,应用程序崩溃,提示以下消息:

Once More, With Feeling

这样,程序就完全好了么?well,几乎是的,但当我swap某个cell(无论左右/右左),出现删除按钮后,点击会出现crash,断在代码tableView:commitEditingStyle:forRowAtIndexPath:.

iOS指南系列:怎么解决内存有关问题 深入调试 结尾篇

The error message is:

以上的原文总结非常好,翻译过来肯定不到位!

开开心心debugging! :-]

译者总结:

1.zoombie是有用的,但最终版本一定要disable(这个设置是项目级别的),否则程序性能问题

2.po ¥eax po variableSymbol p variablesymbol 基本的llbg调试指令:例如c

3.target build settings使用static analyzer来帮助分析代码潜在问题

热点排行