本博通过具体的实例向大家展示如何一步步通过合(xia)理(cai)分析找出问题的罪魁祸首,适合有一定调试经验的童鞋,也欢迎各路神仙和小白围观,本人水平一般,欢迎指正,但我就是不改.
崩溃特征0.崩溃的类型是EXC_BAD_ACCESS
1.App崩溃虽说是随机的,但在一定次数的相同UI操作后必定会发生,但操作的次数不固定。
2.从Xcode里观察崩溃时的源代码,"按道理"完全不可能崩溃!
3.而且特别有意思的地方是:当你在Xcode中开启了"僵尸对象"后,崩溃现象神奇的消失了
4.每次崩溃的堆栈痕迹(以下简称栈迹,觉得别扭么?习惯就好)都不一样,但翻来覆去就是那几种
5.有一次崩溃后栈迹里完全看不到函数符号名称,只有一些地址,这说明堆栈记录破坏的很厉害。还有一次更离谱:崩溃App直接从真机里退出了,留下一脸懵逼的Xcode傻傻的在那里完全没有反应…
用栗子说话有点兴趣了么?下面是其中一个崩溃时的栈迹(是的,我也记不得调试了多少次…):
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x5c89a7ce0) frame #0: 0x00000001c223fdac libobjc.A.dylib`object_isClass + 16 frame #1: 0x000000