【问题标题】:EXC_BAD_ACCESS KERN_INVALID_ADDRESS for class method类方法的 EXC_BAD_ACCESS KERN_INVALID_ADDRESS
【发布时间】:2016-01-11 13:02:30
【问题描述】:

我看到 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

【问题讨论】:

  • 这取决于正在访问的内容。你有堆栈跟踪吗?
  • @Phillip Mills 这是一个简单的跟踪方法,调用分析库。
  • $CLASS_NAME.m 中的第 590 行是什么样的?
  • 第 590 行是类方法的名称 -> + (void)methodName:(NSObject*)model

标签: ios objective-c memory-management crash


【解决方案1】:

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

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

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

我强烈建议通读整篇文章——它涉及使用反汇编程序进行调试,但它在多个场合对我们来说绝对是救命稻草

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

【讨论】:

  • 谢谢A O,我会去发帖的。
【解决方案2】:

由于悬空指针而发生此崩溃。 例如,当变量或对象试图访问已被释放的对象时。

P.S:大多数人可能对“内存泄漏”“悬空指针”

感到困惑

悬空指针发生在指针引用已被释放的内存时。 内存泄漏发生在内存仍被分配但没有引用它时。

【讨论】:

    【解决方案3】:

    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.
    

    【讨论】:

    • 是的,我明白这一点。你能解释一下这是如何与类方法一起工作的吗?因为类方法应该为它自己的所有工作分配内存并在完成后释放。
    • 内存测试最好使用Instrument Tool。
    • 能否提供完整的崩溃日志,以便我找到发生此崩溃的类/方法/对象
    猜你喜欢
    • 2012-10-09
    • 2020-04-13
    • 2017-04-02
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多