2013-03-06 124 views
1

我自己開發的一個比較常見的調試錯誤(Mac,iOS)是EXC_BAD_ACCESS。儘管它的共同性,它的起源和確切的含義仍然是神祕的。谷歌列舉了許多錯誤,但我能找到的唯一的explanation是非正式的和不完整的。EXC_BAD_ACCESS在哪裏記錄?

我知道這個例外(如果這是它的適當術語)意味着代碼已經試圖訪問它沒有讀和/或寫權限的地址 - 例如空地址,或者地址空間外的地址。但是這是基於我之前有關虛擬內存和受保護內存系統的經驗的直觀解釋。我從來沒有見過EXC_BAD_ACCESS記錄在任何地方,事實上我不確定「誰」會向我發送這個異常 - CPU,Mac OS,UNIX,運行時,調試器 - 所以我不知道該問誰是,什麼類的文件諮詢)。例如,我想知道,例外列出的「代碼」是什麼意思。或者另一個例子:其他類似的例外(可能還標有「EXC_」)也可能來自同一個來源?

從哪裏可以找到來自權威來源的EXC_BAD_ACCESS及其代碼和一般語義的解釋?什麼權威來源 - 誰實際上檢測並拋出異常?

回答

2

我已經能夠找到EXC_BAD_ACCESS的唯一官方文檔是技術Q & A,被稱爲Finding EXC_BAD_ACCESS bugs in a Cocoa project。這是過時的,只確認你已經知道:

這種問題通常是過度釋放對象的結果。這可能非常令人困惑,因爲錯誤發生後失敗往往會發生。當程序深入框架代碼時,崩潰也可能發生,通常堆棧中沒有自己的代碼可見。

確實,它可以會很混亂。至少蘋果承認這一點。 :)