我有一个应用程序定期触发“集合在被枚举时发生了变异”。例外。异常的频率似乎因设备而异。
我在所有抛出的异常上都设置了断点,但是在抛出异常时,我得到的唯一堆栈是 __NSFastEnumerationMutationHandler 和它调用的汇编代码。我得到了正在修改的 __NSArrayM 的内存地址,但我不知道如何将其逆向工程为数组的名称或内容。image lookup --address 0x20087d10
在 lldb 中 输入(异常打印的地址)没有输出。$r0
给了我异常对象,但两者都po [$r0 callStackSymbols]
返回po [$r0 callStackReturnAddresses]
nil。
我也不知道如何确定是哪一段代码触发了它;命中异常断点时应用程序线程的内容因事件而异,并且不包括对集合对象的任何明显访问。
如何确定哪个集合正在变异并触发此异常?