2015-10-13 159 views
1

对于类方法,我看到EXC_BAD_ACCESS KERN_INVALID_ADDRESSEXC_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

+0

这取决于什么被访问。你有没有堆栈跟踪? –

+0

@Phillip Mills这是一种简单的跟踪方法,可以调用分析库。 – kthorat

+0

$ CLASS_NAME.m中的第590行是什么样的? –

回答

0

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. 
+0

是的,我明白这一点。你能解释这是如何与类方法一起工作的。由于类方法有望为所有自己的工作分配内存,并在完成时释放内存。 – kthorat

+0

你用ARC吗? – Jamil

+0

你说的是对的 – Jamil

0

我已经看到了这崩溃几次(非常相似,如果不相同堆栈跟踪),并发现它与非原子属性被设置有做新的对象,同时被阅读。

objc_retain +20指令竟然是在对象是read--但在该点的对象已经释放,isa指针的isa属性的调用更改为一个错误的地址

我能按照由Mike灰这篇博客来调试我的问题: https://www.mikeash.com/pyblog/tales-from-the-crash-mines-issue-1.html

我会强烈建议你阅读了整个事情through--它包括使用反汇编器进行调试,但它肯定是在多个场合

为我们的救星

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

+0

谢谢A O,我会通过该帖子。 – kthorat

相关问题