EXC_BAD_ACCESS类方法的KERN_INVALID_ADDRESS
对于类方法,我看到EXC_BAD_ACCESS KERN_INVALID_ADDRESS
。EXC_BAD_ACCESS类方法的KERN_INVALID_ADDRESS
从我的理解,我不应该看到类/静态方法。
我错过了什么吗?
堆栈跟踪:
主题:崩溃:com.apple.root.user发起的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
EXC_BAD_ACCESS一般意味着你正在发送目标C 消息到无效的内存地址。
这可能会导致:
1. An object that you want to use which has been deallocated.
2. When any variable or object is trying to access restricted memory. That means such crash occurs due to memory leak.
我已经看到了这崩溃几次(非常相似,如果不相同堆栈跟踪),并发现它与非原子属性被设置有做新的对象,同时被阅读。
这objc_retain +20
指令竟然是在对象是read--但在该点的对象已经释放,isa
指针的isa
属性的调用更改为一个错误的地址
我能按照由Mike灰这篇博客来调试我的问题: https://www.mikeash.com/pyblog/tales-from-the-crash-mines-issue-1.html
我会强烈建议你阅读了整个事情through--它包括使用反汇编器进行调试,但它肯定是在多个场合
为我们的救星编辑:请注意,我绝对不是50%肯定这是你的问题,但我希望我的轶事经验可以为你节省一些时间。我知道我花了很多工作周来调试看起来像这样的问题,但我仍然从未100%
谢谢A O,我会通过该帖子。 – kthorat
这取决于什么被访问。你有没有堆栈跟踪? –
@Phillip Mills这是一种简单的跟踪方法,可以调用分析库。 – kthorat
$ CLASS_NAME.m中的第590行是什么样的? –