訪問壞內存Bug定位解決

分類:技術 時間:2016-10-25

當你剛接手一個項目的時候(對代碼的內部結構還不清楚),如果出現一些莫名其妙的內存問題,而且也沒有錯誤的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


ads
ads

相關文章
ads

相關文章

ad