程序奔溃的日志
libobjc.A.dylib`objc_msgSend:
0x33786f68: teq.w r0, #0x0
0x33786f6c: beq 0x33786faa ; objc_msgSend + 66
0x33786f6e: push.w {r3, r4}
0x33786f72: ldr r4, [r0]
0x33786f74: lsr.w r9, r1, #0x2
0x33786f78: ldr r3, [r4, #0x8]
0x33786f7a: add.w r3, r3, #0x8
0x33786f7e: ldr r12, [r3, #-8]
0x33786f82: and.w r9, r9, r12
0x33786f86: ldr.w r4, [r3, r9, lsl #2]
0x33786f8a: teq.w r4, #0x0
0x33786f8e: add.w r9, r9, #0x1
0x33786f92: beq 0x33786fa6 ; objc_msgSend + 62
0x33786f94: ldr.w r12, [r4]
0x33786f98: teq.w r1, r12
0x33786f9c: bne 0x33786f7e ; objc_msgSend + 22
0x33786f9e: ldr.w r12, [r4, #8]
0x33786fa2: pop {r3, r4}
0x33786fa4: bx r12
0x33786fa6: pop {r3, r4}
0x33786fa8: b 0x33786fb0 ; objc_msgSend_uncached
0x33786faa: mov.w r1, #0x0
0x33786fae: bx lr
libobjc.A.dylib`objc_msgSend:
0x33786f68: teq.w r0, #0x0
0x33786f6c: beq 0x33786faa ; objc_msgSend + 66
0x33786f6e: push.w {r3, r4}
0x33786f72: ldr r4, [r0]
0x33786f74: lsr.w r9, r1, #0x2
0x33786f78: ldr r3, [r4, #0x8]
0x33786f7a: add.w r3, r3, #0x8
0x33786f7e: ldr r12, [r3, #-8]
0x33786f82: and.w r9, r9, r12
0x33786f86: ldr.w r4, [r3, r9, lsl #2]
0x33786f8a: teq.w r4, #0x0
0x33786f8e: add.w r9, r9, #0x1
0x33786f92: beq 0x33786fa6 ; objc_msgSend + 62
0x33786f94: ldr.w r12, [r4]
0x33786f98: teq.w r1, r12
0x33786f9c: bne 0x33786f7e ; objc_msgSend + 22
0x33786f9e: ldr.w r12, [r4, #8]
0x33786fa2: pop {r3, r4}
0x33786fa4: bx r12
0x33786fa6: pop {r3, r4}
0x33786fa8: b 0x33786fb0 ; objc_msgSend_uncached
0x33786faa: mov.w r1, #0x0
0x33786fae: bx lr
解决方案
20
这样的奔溃,怎么找,你在程序中设置几个断点 多加几个输出 NSLog(@”%s”,__func__);
找具体的位置,想在你发的这里面找错误,很难很难的
找具体的位置,想在你发的这里面找错误,很难很难的
20
这种错误通常是内存管理的问题,一般是访问了已经释放的对象导致的,可以开启僵尸对象(Zombie Objects)来定位问题:
在Xcode的菜单:
Product->Scheme->Edit Scheme->Run ???.app
右边的选项中,选中Enable Zombie Objects
开启该选项后,程序在运行时,假如访问了已经释放的对象,则会给出较准确的定位信息,可以帮助确定问题所在。
该功能的原理是,在对象释放(retainCount为0)时,使用一个内置的Zombie对象,替代原来被释放的对象。无论向该对象发送什么消息(函数调用),都会触发异常,抛出调试信息。
记得在问题被修复后,关闭该功能
在Xcode的菜单:
Product->Scheme->Edit Scheme->Run ???.app
右边的选项中,选中Enable Zombie Objects
开启该选项后,程序在运行时,假如访问了已经释放的对象,则会给出较准确的定位信息,可以帮助确定问题所在。
该功能的原理是,在对象释放(retainCount为0)时,使用一个内置的Zombie对象,替代原来被释放的对象。无论向该对象发送什么消息(函数调用),都会触发异常,抛出调试信息。
记得在问题被修复后,关闭该功能