找到__NSFastEnumerationMutationHandler调用者

时间:2013-06-06 00:11:40

标签: ios xcode lldb

我有一个应用程序,它定期触发“收集在枚举时被突变”。例外。异常的频率似乎因设备而异。

我在抛出的所有异常上都设置了一个断点,但是在抛出异常时,我得到的唯一堆栈是__NSFastEnumerationMutationHandler和它调用的汇编代码。我得到了正在修改的__NSArrayM的内存地址,但我无法弄清楚如何将其反向设计为数组的名称或内容。在lldb中键入image lookup --address 0x20087d10(打印异常的地址)不会输出。 $r0为我提供了异常对象,但po [$r0 callStackSymbols]po [$r0 callStackReturnAddresses]都返回nil。

我也无法弄清楚如何确定触发它的代码段;命中异常断点时应用程序线程的内容因事件而异,并且不包括对集合对象的任何明显访问。

如何确定哪个集合正在变异并触发此异常?

1 个答案:

答案 0 :(得分:0)

事实证明我过于复杂 - 可以直接在lldb命令行引用内存地址,因此po 0x20087d10足以在0x20087d10打印对象的描述。

(Murphy的StackOverflow定律......当你终于放弃并在StackOverflow上发布它时,你终于自己想出来了。)