我有一个应用程序,它定期触发“收集在枚举时被突变”。例外。异常的频率似乎因设备而异。
我在抛出的所有异常上都设置了一个断点,但是在抛出异常时,我得到的唯一堆栈是__NSFastEnumerationMutationHandler和它调用的汇编代码。我得到了正在修改的__NSArrayM的内存地址,但我无法弄清楚如何将其反向设计为数组的名称或内容。在lldb中键入image lookup --address 0x20087d10
(打印异常的地址)不会输出。 $r0
为我提供了异常对象,但po [$r0 callStackSymbols]
和po [$r0 callStackReturnAddresses]
都返回nil。
我也无法弄清楚如何确定触发它的代码段;命中异常断点时应用程序线程的内容因事件而异,并且不包括对集合对象的任何明显访问。
如何确定哪个集合正在变异并触发此异常?
答案 0 :(得分:0)
事实证明我过于复杂 - 可以直接在lldb命令行引用内存地址,因此po 0x20087d10
足以在0x20087d10打印对象的描述。
(Murphy的StackOverflow定律......当你终于放弃并在StackOverflow上发布它时,你终于自己想出来了。)