當你剛接手一個項目的時候(對代碼的內部結構還不清楚),如果出現一些莫名其妙的內存問題,而且也沒有錯誤的log日志,這種問題有時候是比較難定位的,根本就不知道代碼哪里出現了問題,今天剛好遇到了一個這樣的問題,順便總結一下。
當對項目中的某一模塊進行操作的時候遇到的錯誤是 EXC_BREAKPOINT (code=1, subcode=…)
而且沒有任何錯誤log的打印。添加了 全局斷點
還是沒有定位到出錯代碼的位置,這時候就需要對xcode進行一些設置了。
xcode開啟 僵尸模式
,如果遇到 The target process has no stack logs. Run it with the MallocStackLogging env
這種問題那么可以設置下 MallocStackLoggingNoCompact
為YES。
這個時候再對出問題的模塊進行操作,會打印出 [testViewController retain]message sent to deallocated instance
的錯誤提示,這要就定位到了出問題的大體位置了,并且也知道了是壞內存訪問的問題。
但是這個控制器中的代碼有上千行,這個時候如何定位呢,既然是內存問題,這里就用到了內存調試工具 Zombies
了。
打開該工具,運行項目,當出現 message sent to deallocated instance
時候,工具會提示 An Objective-C message was sent to a deallocated object(zombie) at address:0x8b3b200
,點擊提示,工具會提示可能存在內存問題的地方,然后自己看一下定位的具體代碼,就能發現出現問題的地方了。
到這里你就應該定位到出問題代碼的位置了,合理的利用調試工具,用助于我們高效率的開發。
今天是1024,程序員的節日,祝大家節日快樂。
參考資料在 這里 ,歡迎大家轉載,請注明出處。
Tags: iOS開發
文章來源:http://coderperson.com/2016/10/24/bugs-EXC_BREAKPO