EXC_BAD_ACCESS KERN_INVALID_ADDRESS 用于类方法

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

A O*_*A O 8

我已经多次看到这种崩溃(具有非常相似,如果不是完全相同的堆栈跟踪),并发现它与使用新对象设置的非原子属性有关,同时被读取。

objc_retain +20指令原来是对isa正在读取的对象的属性的调用——但此时该对象已被释放并且isa指针更改为错误地址

我能够通过遵循 Mike Ash 的这篇博文来调试我的问题:https : //www.mikeash.com/pyblog/tales-from-the-crash-mines-issue-1.html

我强烈建议通读整篇文章——它涉及使用反汇编器进行调试,但它在多个场合绝对是我们的救星

编辑:请注意,我什至 50% 都不确定这是您的问题,但我希望我的轶事经验可以为您节省一些时间。我知道我已经花了很多工作周来调试看起来像这样的问题,但我仍然不是 100%