2009-11-14 53 views
0

由於我的程序涉及到越來越多的代碼即時通訊開始變得有點沮喪與在控制檯拋出的錯誤信息:如何解釋Xcode控制檯中的一些錯誤消息?

2009-11-14 14:31:57.513 FC [915:5b27] *** - [SearchResultParser respondsToSelector:]:消息發送到釋放實例0x82d28e0

,因爲它實際上告訴我,它有一個選擇,它起源於SearchResultParser做的這個人是不是最差的。但通常我只是「將消息發送到解除分配的實例0x897867d6」。

其他時候,它是堆棧轉儲,它只是告訴我,我認爲是,當前在堆棧中的對象的內存分配。

也許我被寵壞了,但是我一直使用錯誤消息中的更多信息,尤其是來自動態語言:像發生錯誤的行號,有問題的對象的實例名稱等等。

我閱讀了使用儀器,當然有斷點。當答案在你面前時,它會感覺有點毫無意義地通過20+釋放和300行代碼來找出導致暫停的原因:「0x82d28e0導致崩潰」!

在我讓我想起了我從我的微控制器,IDE :)

得到了錯誤信息的好方法有沒有辦法從實例地址去如0x82d28e0到實例名稱? 有沒有辦法使用控制檯中的信息來縮小代碼中導致暫停的位置?尤其是「發送到釋放實例的消息」,因爲我顯然有點渴望與我的內存管理:)

希望有人能幫助我更好地瞭解控制檯:) 謝謝。

+0

您是否檢查過Debugger窗口?它通常會向您顯示完整的堆棧跟蹤以及發生錯誤的代碼行。 –

+0

起初我有點困惑,因爲調試器似乎只是彙編代碼,然後我嘗試引入故意的發佈錯誤,你是對的,我在我自己的代碼中發佈錯誤後向我顯示行或塊。這是比以前更接近:) 謝謝你MihaiD – RickiG

回答

4

此錯誤的問題是,在發生錯誤時,釋放的實例不再可用,因此調試器沒有關於它的任何信息。這種錯誤在自動內存管理的語言中從來沒有發生過,所以在這方面你不能真正比較它們。

看看NSZombieEnabled參數。如果啓用殭屍,則當您的代碼想要釋放它們時,對象會轉換爲殭屍。當您的代碼嘗試再次發佈它們時,這些可以稍後向您提供有關自己的更多信息。

+0

+1推薦NSZombieEnabled - 好推薦 – Till

+0

謝謝你Ole :) 我去檢查,我其實NSZombieEnabled =是。我想我幾個星期前就讀了一些關於它的內容,並設定了這個價值。我還需要做些什麼嗎?我真的無法找到其他任何「NSZombies都很棒,設置爲YES」的東西。 再次感謝:) – RickiG