Code Bye

thread 1:exc_bad_access(code=1,address=0x70000008)

程序日志

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)