xcode - 在 macOS Cocoa App 中诊断 KVO 崩溃的步骤
问题描述
我正进入(状态:
'KVO_IS_RETAINING_ALL_OBSERVERS_OF_THIS_OBJECT_IF_IT_CRASHES_AN_OBSERVER_WAS_OVERRELEASED_OR_SMASHED',
当我关闭基于文档的 Cocoa ObjC 应用程序的主窗口时通知。我在这个区域的项目中没有任何 KVO 观察者,因此没有要删除的观察者。使用 NSZombie 无法诊断。我怀疑重复使用的内存地址可能是问题所在。谁能推荐我如何确定这个问题中涉及的对象?理想情况下,我希望看到观察者对象,这样我就可以从那里向后工作。
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x3eadde6d1760)
frame #0: 0x00007fff68cf38ee libobjc.A.dylib`object_isClass + 31
* frame #1: 0x00007fff3f0840f6 Foundation`KVO_IS_RETAINING_ALL_OBSERVERS_OF_THIS_OBJECT_IF_IT_CRASHES_AN_OBSERVER_WAS_OVERRELEASED_OR_SMASHED + 58
frame #2: 0x00007fff3f2145fe Foundation`NSKeyValueWillChangeWithPerThreadPendingNotifications.llvm.15835543126851482145 + 282
frame #3: 0x00007fff47cfd935 QuartzCore`CAAnimation_setter(CAAnimation*, unsigned int, _CAValueType, void const*) + 132
frame #4: 0x00007fff47cfdeca QuartzCore`-[CAAnimation setDuration:] + 45
frame #5: 0x00007fff47d0314e QuartzCore`-[CALayer addAnimation:forKey:] + 332
frame #6: 0x00007fff47cb26dc QuartzCore`CA::Layer::remove_sublayer(CA::Transaction*, CALayer*) + 334
frame #7: 0x00007fff47cb2554 QuartzCore`CA::Layer::remove_from_superlayer() + 126
frame #8: 0x00007fff3a2f49a4 AppKit`-[NSView _removeLayerFromSuperlayer] + 229
frame #9: 0x00007fff3a2f431f AppKit`-[NSView _setSuperview:] + 225
frame #10: 0x00007fff3a2f7b01 AppKit`-[NSView removeFromSuperview] + 149
frame #11: 0x00007fff3a3dfa88 AppKit`-[NSView removeFromSuperviewWithoutNeedingDisplay] + 36
frame #12: 0x00007fff3a37dbf5 AppKit`-[NSView _finalize] + 1060
frame #13: 0x00007fff3a37d64a AppKit`-[NSView dealloc] + 209
frame #14: 0x00007fff68ce6c8c libobjc.A.dylib`(anonymous namespace)::AutoreleasePoolPage::pop(void*) + 726
frame #15: 0x00007fff3a9a7b93 AppKit`___NSTouchBarFinderSetNeedsUpdateOnMain_block_invoke + 56
frame #16: 0x00007fff3cd8495d CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
frame #17: 0x00007fff3cd84892 CoreFoundation`__CFRunLoopDoObservers + 452
frame #18: 0x00007fff3cd25c82 CoreFoundation`CFRunLoopRunSpecific + 365
frame #19: 0x00007fff3bfbf895 HIToolbox`RunCurrentEventLoopInMode + 293
frame #20: 0x00007fff3bfbf4d4 HIToolbox`ReceiveNextEventCommon + 371
frame #21: 0x00007fff3bfbf348 HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter + 64
frame #22: 0x00007fff3a27c95b AppKit`_DPSNextEvent + 997
frame #23: 0x00007fff3a27b6fa AppKit`-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 1362
frame #24: 0x00007fff3a27575d AppKit`-[NSApplication run] + 699
frame #25: 0x00007fff3a264e97 AppKit`NSApplicationMain + 780
frame #26: 0x000000010004fcd2 ADR ToolBox`main(argc=3, argv=0x00007ffeefbff1e8) at main.m:13
frame #27: 0x00007fff69dc0085 libdyld.dylib`start + 1
frame #28: 0x00007fff69dc0085 libdyld.dylib`start + 1
解决方案
推荐阅读
- .net - 转换为 Lamar - 注册 - 使用 StructureMap 的这段代码的等价物是什么?
- http - 如何检查在 TLS/SSL 握手期间是否进行主机名验证?
- bazel - 如何将规则限制为 cpp 工具链的子集?
- c++ - Open MP 中的冒泡排序较慢
- woocommerce - 是否可以像 woocommerce 默认更新的其他状态一样以颜色突出显示这些状态?
- elasticsearch - Elasticsearch 如何从动态映射中排除字段
- python - TypeError:super() 参数 1 必须是类型,而不是 MagicMock - azure-devops python 包
- vue.js - 将对象嵌套在对象中
- javascript - 将数据库导入 JS 文件
- java - 无法使用外部 jar 中定义的自定义附加程序