kth*_*rat 2 crash memory-management objective-c ios
我正在查看EXC_BAD_ACCESS KERN_INVALID_ADDRESS类方法。
据我所知,我不应该在类/静态方法中看到这个。
我错过了什么吗?
堆栈跟踪:
线程:崩溃:com.apple.root.user-initiated-qos
0 libobjc.A.dylib 0x0000000196eac0b4 objc_retain + 20
1 $APP_NAME 0x00000001002611a8 +[$CLASS_NAME $METHOD_NAME:] ($CLASS_NAME.m:590)
2 libdispatch.dylib 0x0000000197511994 _dispatch_call_block_and_release + 24
3 libdispatch.dylib 0x0000000197511954 _dispatch_client_callout + 16
4 libdispatch.dylib 0x000000019751e780 _dispatch_root_queue_drain + 1848
5 libdispatch.dylib 0x000000019751fc4c _dispatch_worker_thread3 + 108
6 libsystem_pthread.dylib 0x00000001976f121c _pthread_wqthread + 816
7 libsystem_pthread.dylib 0x00000001976f0ee0 start_wqthread + 4
我已经多次看到这种崩溃(具有非常相似,如果不是完全相同的堆栈跟踪),并发现它与使用新对象设置的非原子属性有关,同时被读取。
该objc_retain +20指令原来是对isa正在读取的对象的属性的调用——但此时该对象已被释放并且isa指针更改为错误地址
我能够通过遵循 Mike Ash 的这篇博文来调试我的问题:https : //www.mikeash.com/pyblog/tales-from-the-crash-mines-issue-1.html
我强烈建议通读整篇文章——它涉及使用反汇编器进行调试,但它在多个场合绝对是我们的救星
编辑:请注意,我什至 50% 都不确定这是您的问题,但我希望我的轶事经验可以为您节省一些时间。我知道我已经花了很多工作周来调试看起来像这样的问题,但我仍然不是 100%