2012-07-09 120 views
2

我的應用崩潰(隨機的方式),碰撞是不能重現-能的100%的時間。但它似乎只發生在設備上,而不是模擬器中。在設備上運行時崩潰的模擬器,而不是在設備

當我在模擬器NSZombies跑我從來沒有看到的問題。有人能夠點亮我的觀點。

  • 設備內存有限,也許是因爲這個原因而崩潰。
  • 什麼會被認爲是會導致崩潰的大內存分配?
  • 內存泄漏/大分配會導致內存損壞嗎?
  • 我所有的崩潰總是EXC_BAD_ACCESS,但就像我說的,從來沒有發生在模擬器,所以我不能運行殭屍。 (或者有另一種方法嗎?)

注意我也模擬了模擬器上的低內存警告,看看是否導致問題。

這使我瘋狂。任何幫助,將不勝感激。

+1

你不能使用ARC的原因嗎?只是爲了排除內存問題。兩者之間的主要區別在於區分大小寫。模擬器不區分大小寫,但設備是。然而,「正常情況下」你會得到sigabrt錯誤vs exc_bad_access,如果它是一個案件的問題。唯一需要嘗試的是在手機插入時在手機上運行它,以便將任何錯誤輸出到控制檯。 – 2012-07-09 16:47:34

+0

不能去ARC,因爲我必須仍然支持iOS 3.0(是的,我知道它很爛)。我試着用調試插入它,但是我看不到殭屍對象,也沒有計算引用計數或查看堆棧跟蹤,除了崩潰的行之外,這是有意義的。我知道它崩潰的地方,但我需要知道哪些其他類發佈了這個對象。 – MrShoot 2012-07-09 16:55:39

+0

使用斷點。我確定你的一個對象是零(可能很快就會發布),那是什麼導致了錯誤。在這裏尋找放置一種通用的斷點(第二個評論在這篇文章:http://stackoverflow.com/a/8072273/530933) – 2012-07-09 17:02:21

回答

0
I know where it crashes but I need to know which other classes released this object. 

覆蓋 - [發行] - [自動釋放]和 - [保留]爲你的對象(或者你可以爲NSObject的做到這一點,如果你不知道哪個對象),然後記錄他們,設置斷點。

如果您確定在每個點上正在釋放哪個對象,請將時間戳/對象ID/retaincount添加到日誌語句中,那麼您可能會將所有數據放入電子表格中,然後獲得相同類型的樂器會給你的數據。

恥辱,你必須建立3.0。幾乎沒有人再使用3.x,而ARC(雖然不是所有問題的銀彈)比非ARC更好。

而且這裏有一個提示:刪除你的模擬器的應用程序,並重新安裝。我有一個問題,我的項目中缺少一些捆綁資源,但模擬器在構建之間掛着它們。如果試圖加載的.xib就是不再在你的項目中,我可以看到它崩潰...

相關問題