我看到 EXC_BAD_ACCESS KERN_INVALID_ADDRESS
用于类方法。
据我了解,我不应该在类/静态方法中看到这种情况。
我错过了什么吗?
堆栈跟踪:
Thread : Crashed: 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%
关于ios - 类方法的 EXC_BAD_ACCESS KERN_INVALID_ADDRESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33108420/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |