2010-08-27 27 views
1

我有它運行在模擬器上正常,但是,在設備上安裝時,它給了我一個EXC_BAD_ACCESS,當我嘗試滾動一頁滾動視圖的應用程序。我已經通過分配和泄漏儀器運行它,但沒有泄漏,沒有殭屍信息...我只是好奇,什麼可能會導致模擬器和設備有這樣的差異?任何方式來調試,因爲我的符號化崩潰日誌(部分在下面),似乎沒有非常符號化。EXC_BAD_ACCESS在設備上,但罰款模擬器

異常類型:EXC_BAD_ACCESS(SIGBUS)
異常代碼:KERN_PROTECTION_FAILURE在0x0000000f
崩潰螺紋:0

線程0毀損:
0 libobjc.A.dylib                   0x0000286e objc_msgSend + 18
1 MyApp                                 0x00004fee爲0x1000 + 16366
2的UIKit                                     0x000668f4 - [UIViewController的視圖] + 104
3 MyApp的                              0x00009716 0x1000的+ 34582
4 MyApp的                              0x0000960c爲0x1000 + 34316
5的UIKit                                     0x0001426c - [UIScrollView中setContentOffset:] + 344

由於

+0

你訪問存儲/在你的應用程序的文件目錄下載的一些數據/媒體(即一些在設備上,但捆綁的不是一部分..)導致代碼訪問它表現不同的模擬器和設備有時...(我不記得我是如何解決它..或者如果我做錯了什麼..) – lukya 2010-08-27 11:43:17

+0

我確實有幾個圖像,但他們都在資源,所以應該被複制到設備。這是我能想到的唯一的事情。 – joec 2010-08-27 12:06:47

+0

請檢查,如果他們真的被複制到捆綁。如果是這樣,你可以在這裏找到它們:「Groups&Files」Browser - >「Targets」 - > Your Target - >「Copy Bundle Recourses」。如果不是,只需將它添加到那裏。 – vikingosegundo 2010-08-27 13:30:21

回答

2

你在模擬器上的代碼可能有錯誤,但不只是運氣EXC_BAD_ACCESS觸發一個指針取消引用是不是在映射的內存。指針可能不好,並且可以訪問,但是沒有被檢測到 - 它仍然是一個錯誤。

您已經檢查看有沒有殭屍傳遞消息,這將是我的第一個建議。

接下來要做的是啓用保護的malloc - 然後閱讀本

http://developer.apple.com/iphone/library/documentation/Performance/Conceptual/ManagingMemory/Articles/MallocDebug.html

你只能做到這一點的模擬器 - 你的目標是使用超敏感堆,使該錯誤在模擬器中引發EXC_BAD_ACCESS。

相應的文章:

  1. 看看如何設置變量在GDB
  2. 閱讀「檢測堆損壞」部分
2

在設備上爲訪問可以爲許多引起的原因,其中大多數與設備內存少於模擬器的事實有關它會盡快釋放內存。

它發現的問題是運行無斷點在調試模式下設備上的應用程序(一個爲什麼做它是添加斷點,然後將其刪除)的最佳方式。如果您可以通過這種方式重現不良訪問,那麼在重現它之後,您可以查看調試器控制檯(cmd + shift + y),您將看到程序已停止在類似於斷點的位置,然後繼續執行線程堆棧看最後一次調用你的應用程序是否失敗,可能是訪問了一個糟糕的指針。

+0

感謝哥們,我發現我的問題使用你的方式找到內存問題的變量....謝謝 – 2013-07-09 06:26:42

1

我想我的情況下加入到討論。我剛剛解決了一個類似這個問題。它在模擬器上工作,但在設備上失敗。認爲這是一個記憶問題。不是。

原來我已經忘記了上一個非空法return。預計會返回一個價值,但我忘記完成回報。非常糟糕的錯誤,如果你問我,但它在模擬器中運行沒有問題(即使返回實際上用於存儲變量並使用其他一些東西)。

不知何故,模擬器的工作,每次與被遺忘的回報。打我怎麼樣,但我只能瘋狂地猜測它必須把我使用的最後一個變量放在返回應該指向的同一個地方,導致錯誤(錯誤但正確)的返回。

然後跑了設備在正常條件下它每一次崩潰。讓我一步一步調試,以實現我沒有正確返回失敗的方法的結果。

希望它可以幫助任何人面對這個問題!

相關問題