gpt4 book ai didi

objective-c - 寻找过度释放的根源

转载 作者:行者123 更新时间:2023-12-03 18:05:43 26 4
gpt4 key购买 nike

我一直看到应用程序用户以崩溃报告形式发送的相同消息。很明显,一个对象被过度释放,但我无法复制它,并且我正在寻找有关追踪其来源的提示。

崩溃报告中的相关部分显示了这一点:

Application Specific Information:
objc_msgSend() selector name: release

Thread 0 Crashed: Dispatch queue: com.apple.main-thread
0 libobjc.A.dylib 0x90892edb objc_msgSend + 27
1 com.apple.CoreFoundation 0x95ec5a40 __CFBasicHashStandardCallback + 384
2 com.apple.CoreFoundation 0x95ec564e __CFBasicHashDrain + 478
3 com.apple.CoreFoundation 0x95ead6f1 _CFRelease + 353
4 com.apple.CoreFoundation 0x95eda0ed _CFAutoreleasePoolPop + 253
5 com.apple.Foundation 0x97ecedd6 NSPopAutoreleasePool + 76
6 com.apple.Foundation 0x97ececfe -[NSAutoreleasePool drain] + 130
7 com.apple.AppKit 0x9211255f -[NSApplication run] + 1013
8 com.apple.AppKit 0x9210a535 NSApplicationMain + 574
9 TheApp 0x000020a6 start + 54

我使用过僵尸和泄漏,但没有看到任何东西。我浏览了代码,但看不到它。

下一步是什么?我可以从这些信息中辨别出其来源的任何提示吗?

这个几乎完全相同的崩溃报告重复出现是否意味着它是被过度释放的同一个对象,或者因为它引用了自动释放池意味着它可能是任何对象?

对 _CFRelease 的引用是否意味着它是一个被过度释放的 Core Foundation 对象?

最佳答案

I've used zombies and leaks, but haven't seen anything there.

这很奇怪。

What's the next step?

过度释放崩溃的下一步通常是使用 Instruments 的 Zombies 模板运行应用程序。第二条发布消息将在 Instruments 的时间线图表中升起一个标志,您可以单击一个按钮来了解更多信息。

还可以尝试使用 Xcode 3.2 或更高版本中的静态分析器构建您的应用程序。

Does the fact that this nearly exact same crash report is coming in repeatedly mean that it's the same object that's being over released, or because this is referring to the autorelease pool mean it could be any object?

可以是任何对象,但几乎可以肯定每次都是同一个对象,除非您在整个代码库中进行了错误的内存管理。

Does the reference to _CFRelease mean it's a Core Foundation object that's being over released?

没有。

关于objective-c - 寻找过度释放的根源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2550741/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com