2011-10-25 17 views
1

我在調試我的xcode項目時遇到了問題。 當我的應用程序崩潰,我得到一個不可讀的堆棧跟蹤是這樣的:如何讓我的xcode stacktrace再次可讀?

2011-10-25 10:03:29.966 fruehstueck[2541:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil' 
*** First throw call stack: 
(0x352918bf 0x303ce1e5 0x351e620f 0x2c381 0x46f6d 0x3138f7ff 0x3139bc39 0x3139baa9 0x3139b98f 0x3139b211 0x3139af53 0x3138f673 0x3138f349 0x3a347 0x3aa87 0x351eb435 0x3147473f 0x3137050f 0x3136ff01 0x313564ed 0x31355d2d 0x3717be13 0x35265553 0x352654f5 0x35264343 0x351e74dd 0x351e73a5 0x3717afed 0x31384743 0x2e01 0x2dc0) 

代碼本身並不在我的源代碼,但在停止線「詮釋retVal的= ...」與SIGBART信號接收。

int main(int argc, char *argv[]) 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    int retVal = UIApplicationMain(argc, argv, nil, nil); 
    [pool release]; 
    return retVal; 
} 

有人可以告訴我,如果我能回到從前,我堆棧跟蹤,其中至少我可以看一下在哪條線路我的應用程序崩潰?

Thx提前, 特立獨行

回答

1

它相當簡單:

-[__NSArrayM insertObject:atIndex:]: object cannot be nil 

如果你想跟蹤它,你知道的步驟,就不會花太長時間去猜測其「insertObject」調用正在被賦予一個零指針。

爲了獲得正確的堆棧跟蹤,您是否嘗試過清理構建?另外,嘗試與斷點。 (並確保您沒有使用XCode的測試版)。

+0

「XCode的調試版」是什麼意思? – Maverick1st

+0

對不起,我的意思是「測試版」。編輯答案。 – zakishaheen

+0

嗯,斷點的問題是,這個錯誤是隨機發生的。我在視圖控制器之間進行切換,並在切換應用程序崩潰之後進行切換。但是我沒有收到內存警告,所以我真的不知道,爲什麼它在前5次運行並且第6次崩潰。 我沒有使用XCode的測試版。我現在嘗試一個乾淨的構建,但我的希望很低。 – Maverick1st

1

您並未將應用程序委託分配給UIApplicationMain。這是故意的嗎?

如果不是這樣,如果你使用的Xcode 4.2和iOS5的SDK你的主必須是這樣的:

int main(int argc, char *argv[]) 
{ 
    @autoreleasepool { 
     return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 
    } 
} 
+0

該項目是作爲xcode 4.0下的ios 4項目啓動的。我只是使用了我公司總是使用的模板。 爲什麼我的主要應該看起來像你寫的是有原因嗎? – Maverick1st

+0

當您使用Xcode 4.2和iOS5 SDK時,可以使用自動引用計數(ARC)功能。從Apple的網站: 「針對Objective-C的自動引用計數(ARC)使內存管理成爲編譯器的工作。通過使用新的Apple LLVM編譯器啓用ARC,您將永遠不需要鍵入保留或釋放,從而大大簡化了開發過程,同時減少崩潰和內存泄漏,編譯器對你的對象有完整的理解,並在每個對象不再使用時立即釋放,所以應用程序運行速度與往常一樣快,並具有可預測的平滑性能。 –

+0

好吧,但是我不必爲此重構整個項目嗎? – Maverick1st

0

從我見過你不能真正symbolicate調用堆棧了,但你可以解決這個問題。如果您不介意更改應用程序代碼或在Xcode窗口的調試導航器中使用圖形調用堆棧,請檢查this答案。

相關問題