2013-06-06 65 views
0

我有一個應用程序,它定期觸發一個「集合被枚舉時發生了變化」。例外。異常的頻率似乎因設備而異。查找__NSFastEnumerationMutationHandler調用者

我對所有引發的異常都設置了斷點,但在引發異常時,我得到的唯一堆棧是__NSFastEnumerationMutationHandler和它調用的彙編代碼。我得到了正在修改的__NSArrayM的內存地址,但我無法弄清楚如何將其反向工程到數組的名稱或內容中。在lldb中鍵入image lookup --address 0x20087d10(打印異常的地址)不會輸出。 $r0給我的例外對象,但po [$r0 callStackSymbols]po [$r0 callStackReturnAddresses]返回零。

我也不知道如何確定哪一段代碼觸發它;應用程序線程在遇到異常斷點時的內容因事件而異,並且不包括對集合對象的任何明顯訪問。

如何確定哪個集合正在發生突變並觸發此異常?

+0

順便提一下,爲好奇,事故的原因錯誤在於我註冊並不必要地刪除了一個NSURLProtocol子類,而當我在網頁請求觸發CoreFoundation搜索匹配協議時碰巧這樣做時,它導致了此異常。 – Arkaaito

回答

0

事實證明我過於複雜 - 可以直接在lldb命令行中引用內存地址,因此po 0x20087d10足以在0x20087d10處打印對象的描述。

(墨菲的StackOverflow的法律......當你終於放棄,並張貼在計算器上,你最後數字出來自己。)