thread 1:exc_bad_access(code=1,address=0x70000008) 怎么确定

iOS 码拜 9年前 (2016-05-04) 1571次浏览
程序奔溃的日志
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对象,替代原来被释放的对象。无论向该对象发送什么消息(函数调用),都会触发异常,抛出调试信息。
记得在问题被修复后,关闭该功能

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明thread 1:exc_bad_access(code=1,address=0x70000008) 怎么确定
喜欢 (0)
[1034331897@qq.com]
分享 (0)