亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當泄漏儀器沒有顯示時,如何調試內存泄漏?

當泄漏儀器沒有顯示時,如何調試內存泄漏?

慕斯王 2019-07-12 09:39:49
當泄漏儀器沒有顯示時,如何調試內存泄漏?我有一個用SWIFT編寫的iOS應用程序,它正在泄漏內存-在某些情況下,一些對象應該被釋放,但它們不是。我是通過簡單的補充來了解這個問題的。deinit調試這樣的消息:deinit {     println("DEINIT: KeysProvider released")}因此,在發生導致對象釋放的事件之后,deinit消息應該出現在控制臺中。但是,對于一些應該釋放的對象,消息丟失了。不過,泄漏開發工具不會顯示任何泄漏。我如何解決這種情況?
查看完整描述

3 回答

?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

在Xcode 8中,您可以單擊“調試內存圖”按鈕,在調試工具欄中(顯示在屏幕底部):

只需標識左側面板中您認為應該已解除分配的對象,它將顯示對象圖(如上面的主畫布所示)。這對于快速確定在所涉對象上建立強引用的位置非常有用。從這里開始,您可以開始您的研究,診斷為什么這些強引用沒有得到解決(例如,如果所討論的對象具有來自本應被取消分配的其他對象的強引用,也可以查看該對象的圖表,您可能會發現這個問題(例如,強引用周期、重復計時器等)。

注意,在右邊的面板上,我看到了呼叫樹。我是通過打開方案設置中的“malloc堆?!比罩具x項來實現這一點的:

無論如何,這樣做之后,您可以單擊上面第一個屏幕快照的右面板中的堆棧跟蹤中顯示的相關方法調用旁邊的箭頭,您可以看到最初建立強引用的位置:

上述內存診斷技術(及更多)將在WWDC 2016的后期演示。用Xcode進行可視化調試.


在我最初的回答中,傳統的儀器技術(如果使用舊版本的Xcode特別有用)將在下面描述。


我建議使用具有“記錄參考計數”功能的儀器“分配”工具:

然后,您可以在“儀器”中運行該應用程序,然后搜索您知道正在泄漏的類,然后單擊箭頭鉆進去:

然后,您可以使用右側的“ExtendedDetails”面板鉆研詳細信息并查看堆棧跟蹤:

在“擴展詳細信息”面板中,將注意力集中在黑色代碼上,而不是系統調用的灰色代碼上。無論如何,在“擴展詳細信息”面板中,您可以鉆到源代碼中,在儀器中:

有關使用儀器追蹤記憶體問題的更多資料及示范,請參閱:


查看完整回答
反對 回復 2019-07-12
  • 3 回答
  • 0 關注
  • 538 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號