1

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

我在所有抛出的异常上都设置了断点,但是在抛出异常时,我得到的唯一堆栈是 __NSFastEnumerationMutationHandler 和它调用的汇编代码。我得到了正在修改的 __NSArrayM 的内存地址,但我不知道如何将其逆向工程为数组的名称或内容。image lookup --address 0x20087d10在 lldb 中 输入(异常打印的地址)没有输出。$r0给了我异常对象,但两者都po [$r0 callStackSymbols]返回po [$r0 callStackReturnAddresses]nil。

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

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

4

1 回答 1

1

事实证明我把事情复杂化了——可以直接在 lldb 命令行中引用内存地址,因此po 0x20087d10足以在 0x20087d10 处打印对象的描述。

(墨菲的 StackOverflow 定律......当你最终放弃并将它发布到 StackOverflow 上时,你终于自己弄清楚了。)

于 2013-06-06T00:55:52.507 回答