我需要帮助找出在 LLDB 中获取可用信息所需的魔法咒语。
我正在尝试调试一些奇怪的行为,我可以可靠地重现该问题,但我还不了解根本原因。我注意到有一个异常被抛出,所以我在 Xcode 中添加了一个异常断点。
例外:
CoreData:错误:严重的应用程序错误。在调用 -controllerDidChangeContent: 期间,从 NSFetchedResultsController 的委托中捕获了一个异常。*** -[__NSArrayM objectAtIndex:]:索引 2 超出了带有 userInfo 的空数组的界限(null)
所以,有了我的断点,我得到了以下堆栈跟踪:
这看起来超级有用!对于可重用的标题视图,UICollectionViewFlowLayout 看起来有些古怪……现在我只需要……哦。废话。等待。什么?
如何检查堆栈跟踪的第 1 帧中使用超出范围的索引调用的数组?我可以po <some memory address>
在控制台中检查它吗?I cannot use frame variable
in the LLDB console when Frames 11 - 1 are selected ( from here ).
我阅读此堆栈跟踪的方式是:
- (第 14 帧)获取的结果控制器已获取托管对象上下文更改,并将其称为委托
- (第 13 帧) FRC 委托,一个实例
FHMemberDirectory
,将消息发送-memberDirectoryDidChangeContent:completion:
到视图控制器FHMemberDirectoryViewController
,它是一个子类UICollectionViewController
- (第 12 帧)视图控制器调用
-performBatchUpdates:completion:
它的 UICollectionView 实例 - (Frames 10 - 1) Private Apple 的东西碰巧尝试在屏幕上布局集合视图;我认为!
...如果我错过了一些明显的东西,请告诉我!这个问题是关于调试的,我希望另一双眼睛或更多的专业知识可以启发我。
在我未经训练的眼中,这似乎是隐藏在 Apple 代码中的一个错误,但我仍然需要想办法解决它。我的问题的要点是了解如何在不受我直接控制的代码中从 LLDB 控制台获取有用信息。