2012-02-24 46 views
0

從裝置SIGABRT的崩潰日誌上的線條指向:光滑的代碼,但SIGABRT

NSArray *results = [self.managedObjectContext executeFetchRequest:request &error]; 
    if ([results count] > 0) { // SIGABRT on this line. 

和(對於相同的裝置):

if (myfunc(myobj)) { // SIGABRT on this line. 

其中MyObj中是一個指針必須在應用程序配置中爲零,並且在崩潰行之前的行中進行初始化。 MYFUNC是一個函數看起來像:

BOOL myfunc(id object) { 
    return object != nil; 
} 

,所以我會考慮的第二次碰撞的

myobj = something 
if (myobj != nil) { // SIGABRT on this line. 

我的知識是不夠的,瞭解這種崩潰的可能性(可能他們甚至隨機)在某些設備上(在大多數設備上一切正常,穩定)。

任何人有這樣的問題或有調試經驗嗎?

+0

如果你一切正常,崩潰永遠不會是「隨機的」。通常會有一些粗體文字伴隨SIGABRT例外。這將是最有幫助的。 – CodaFi 2012-02-24 22:14:14

回答

0

指針比較可能無法崩潰。另外,如果myfunc不是函數指針,則if (myfunc(myobj))不會崩潰。

Objective-C代碼也沒有問題。

你確定你正在解釋調試器的輸出嗎?調試符號是否正確?嘗試關閉優化。

也許你在看錯誤的堆棧:檢查所有線程的堆棧。

SIGABRT是一個信號,告訴過程有什麼不對。也許這只是iOS殺死你的應用程序,因爲內存不足。或者由於斷言失敗,該過程命中abort()

+0

有一種方法在觸摸指針時導致崩潰 - 當您剛釋放對象並且未將指針設置爲零時。 – SVGreg 2012-02-24 22:24:07

+0

@SVGreg如果您解除引用**懸掛指針,應用程序*可能會崩潰。在發佈的代碼中不會發生這種情況,除非在[[results count]]中看起來不那麼垂頭喪氣。 – 2012-02-24 22:27:03

+0

嘿,夥計們,抱歉花了你的時間,這有點愚蠢的我沒有問問前檢查uuid的報告。感謝你的時間,我完全同意你的發言,尼古拉,所以必須接受。報告uuid與它被象徵化的應用程序不一樣,指向的代碼應該有效(我不瘋狂,歡呼!) – 2012-02-24 22:33:28