我有一个应用程序,它会定期触发“在枚举时对集合进行了变异”。例外。异常发生的频率似乎在不同设备之间有所不同。
我在抛出的所有异常上都设置了一个断点,但是在抛出异常时,我得到的唯一堆栈是__NSFastEnumerationMutationHandler及其调用的汇编代码。我得到了正在修改的__NSArrayM的内存地址,但是我不知道如何将其反向工程为数组的名称或内容。在lldb中键入image lookup --address 0x20087d10
(异常打印的地址)没有任何输出。 $r0
给我异常对象,但是po [$r0 callStackSymbols]
和po [$r0 callStackReturnAddresses]
都返回nil。
我也无法弄清楚如何确定代码的哪一部分触发了它。遇到异常断点时,应用程序线程的内容因事件而异,并且不包括对集合对象的任何明显访问。
如何确定哪个集合正在变异并触发此异常?
最佳答案
事实证明,我的工作过于复杂-可以直接在lldb命令行上引用内存地址,因此po 0x20087d10
足以在0x20087d10处显示对象的描述。
(墨菲的StackOverflow定律...当您最终放弃并将其发布在StackOverflow上时,您终于自己弄清楚了。)
关于ios - 查找__NSFastEnumerationMutationHandler调用方,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16951840/