2011-01-26 303 views
28

難以在iPad應用程序中追蹤崩潰。這個困難真的源於應用程序失敗時不存在錯誤或堆棧跟蹤的事實。它簡直就像凱澤澤澤一樣消失,「就這樣,噗,他走了。」iOS崩潰無錯誤或堆棧跟蹤

我已經在模擬器和設備上覆制了崩潰。有零個設備日誌,沒有在控制檯等

我知道,在崩潰期間一些CoreGraphics操作在後臺線程發生。通常,三個左右的NSOperations正在踢一些圖像混合。

共混由CGContext上*調用(的DrawImage,SetBlendMode,SetAlpha等)。 NSOperation回調到主線程中的委託來處理圖像並將其設置爲UIImage,因此它不應該成爲UI主線程衝突,但我在這一點上不打折扣任何東西。

是否有一些Xcode技巧我失蹤,以確切地發生了什麼事?或者至少可以更好地瞭解問題所在?

編輯我已經運行在儀器跟蹤內存使用情況的應用程序,並認爲它是非常搖滾2MB左右穩定。所以,不要認爲這是一個記憶問題。但經過考慮,這塊穩定的2MB似乎異常低下。 Instruments有沒有機會拿起CoreGraphics的配置?

+1

我從來沒有做過任何iOS *開發*,但是當iOS應用程序開始崩潰時(並且沒有留下任何日誌),它最終成爲一個內存不足的問題:關閉所有應用程序並重新啓動設備清除了所有內容。 – Ken 2011-01-26 21:44:32

+0

@Ken - 添加了一個與低內存相關的編輯。謝謝。 – MarkPowell 2011-01-26 21:50:42

+0

確保您不只是運行該應用程序,而是調試它。要驗證,請確保斷點處於打開狀態。 – 2011-01-26 21:57:42

回答

9

由於缺乏一個更好的解決辦法,如果不是很明顯,辣椒NSLogs您的應用程序循環,即發生這種情況,然後通過斷點和/或其他日誌鑽從那裏更深。

16

試着讀取寄存器。

每當我的應用程序崩潰,沒有錯誤,在大多數情況下,我發現在寄存器除外。

首先去例外選項卡和「添加例外斷點」使用+在左下角。 enter image description here

然後,當應用程序崩潰的 「0 objc_exception_throw」 點擊下線程1 enter image description here

最後,在控制檯輸入:

  • 寄存器讀取 (你應該得到的寄存器列表)
  • po $ rax(通常情況下是'rax')

    (你應該在控制檯上看到異常輸出)

希望這有助於。

2

超級晚的答案,但我發現,使用的try/catch有助於使信息時,我不能讓一個堆棧跟蹤和我的應用程序拉扯科澤爾Soze。

@try 
{ 
    // suspected code causing crash/errors 
} 
@catch (NSException *exception) 
{ 
    NSLog(@"Exception: %@", exception); 
} 
0

在我的情況下,這是由於一個對象被釋放。通常它會說消息發送到釋放實例或類似的東西,但它沒有。我檢查了iPhone的日誌,發現這個:KERN_INVALID_ADDRESS,我GOOGLE了並碰到這個:KERN_INVALID_ADDRESS

啓用殭屍對象,發現我試圖使用一個釋放實例。它還告訴我事後在日誌裏是什麼東西。

希望它有助於未來的遊客。

1

就我而言,這是因爲我在計劃中啓用了「殭屍對象」,以幫助查找問題,最終導致它耗盡內存並崩潰。

1

就我而言,這是因爲故事板中的插座連接不良。 如果viewDidLoad要加載的方法UIViewController被調用,使用斷點檢查。如果沒有,請檢查故事板中的插座連接。

不正確的連接使應用程序崩潰而沒有任何錯誤或堆棧跟蹤。

我很想知道舊版本的XCode中顯示的this class is not key value coding-compliant for the key錯誤是怎麼回事。