INSTRUMENTS調試工具的使用(二十九) —— 分析你App的內存使用之找到內存泄露(四)

版本記錄

版本號 時間
V1.0 2018.06.15

前言

我們在做app的時候,不是做完功能就結束了,很多時候是需要進行檢查和優化的,而xcode自帶了一個很好的檢查工具,可以檢測內存泄漏。還可以查看哪一個方法比較耗時。還可以檢測離屏渲染等等,隨后的幾篇我們就說一下這個工具的使用。感興趣的可以看這幾篇。
1.INSTRUMENTS調試工具的使用(一)
2.INSTRUMENTS調試工具的使用(二)
3.INSTRUMENTS調試工具的使用(三)
4.INSTRUMENTS調試工具的使用(四)
5.INSTRUMENTS調試工具的使用(五)
6.INSTRUMENTS調試工具的使用(六)
7.INSTRUMENTS調試工具的使用(七)
8.INSTRUMENTS調試工具的使用(八)
9.INSTRUMENTS調試工具的使用(九)
10. INSTRUMENTS調試工具的使用(十)
11. INSTRUMENTS調試工具的使用(十一) —— 簡介(一)
12. INSTRUMENTS調試工具的使用(十二) —— 通常任務之啟動Instruments(一)
13. INSTRUMENTS調試工具的使用(十三) —— 通常任務之簡單了解Instruments(二)
14. INSTRUMENTS調試工具的使用(十四) —— 通常任務之創建、保存和打開跟蹤文檔(三)
15. INSTRUMENTS調試工具的使用(十五) —— 通常任務之指定目標應用和設備(四)
16. INSTRUMENTS調試工具的使用(十六) —— 通常任務之訪問和使用個別儀器(五)
17. INSTRUMENTS調試工具的使用(十七) —— 通常任務之記錄、暫停和停止跟蹤(六)
18. INSTRUMENTS調試工具的使用(十八) —— 導航收集的數據之關于數據分析(一)
19. INSTRUMENTS調試工具的使用(十九) —— 導航收集的數據之導航時間軸窗格(二)
20. INSTRUMENTS調試工具的使用(二十) —— 導航收集的數據之導航詳細面板(三)
21. INSTRUMENTS調試工具的使用(二十一) —— 導航收集的數據之將數據映射到源代碼(四)
22. INSTRUMENTS調試工具的使用(二十二) —— 導航收集的數據之查看您應用的源代碼(五)
23. INSTRUMENTS調試工具的使用(二十三) —— 分析你App的性能之測量CPU使用情況(一)
24. INSTRUMENTS調試工具的使用(二十四) —— 分析你App的性能之測量圖形性能(二)
25. INSTRUMENTS調試工具的使用(二十五) —— 分析你App的性能之監視網絡和文件I / O(三)
26. INSTRUMENTS調試工具的使用(二十六) —— 分析你App的內存使用之關于內存分析(一)
27. INSTRUMENTS調試工具的使用(二十七) —— 分析你App的內存使用之檢測內存使用(二)
28. INSTRUMENTS調試工具的使用(二十八) —— 分析你App的內存使用之找到廢棄的內存(三)

Find Memory Leaks - 找到內存泄露

Leaks分析模板使用Allocations and Leaks工具來測量應用程序中的一般內存使用情況,并檢查泄漏 - 已分配給不再被引用和可訪問的對象的內存。

注意:如果Instruments可以訪問關于您的應用程序源代碼的信息,則會將泄漏報告為類名稱。 否則,將泄漏報告為內存地址,例如Malloc大小。 要確保Instruments可以訪問有關代碼的信息,請從Xcode啟動分析(請參閱Profile from Xcode)或配置符號映射文件(請參閱Map Data to Source Code)。

To look for memory leaks - 尋找內存泄漏

  • 1)啟動儀器。
  • 2)在出現的性能分析模板選擇對話框中,單擊Leaks
  • 3)從目標設備和進程列表中選擇您的設備和應用程序。
  • 4)點擊Choose創建一個跟蹤文檔。
  • 5)單擊工具欄中的錄制按鈕(或按下Command-R)開始錄制。
  • 6)正常使用你的應用程序
  • 7)觀察時間線窗格中的泄漏儀器是否有泄漏。泄漏顯示為紅色條。
  • 8)單擊時間線窗格中的“泄漏”工具以在詳細信息窗格中顯示與泄漏相關的信息。
  • 9)從詳細信息窗格的導航欄中的詳細類型列表中選擇調用樹。顯示與任何檢測到的泄漏相關的方法調用列表。
  • 10)按Command-2顯示檢查器窗格的顯示設置區域。
  • 11)在Call Tree顯示設置下,選擇Invert Call TreeHide System Libraries。最先顯示最近的方法調用。它還有助于縮小方法調用列表的范圍,使其適用于您的應用。由您的應用進行的方法調用以黑色顯示,并以用戶代碼圖標開頭。
  • 12)在調用樹中,選擇要調查的方法調用。
  • 13)按下Command-3在檢查器的擴展詳細信息區域中顯示所選方法調用的堆棧跟蹤。
  • 14)雙擊堆棧跟蹤中的方法調用以在儀器中顯示其代碼。
  • 15)單擊詳細信息窗格頂部的Xcode按鈕,以打開Xcode中的代碼進行審閱和編輯。

To investigate a leaked object using a backtrace - 使用回溯來調查泄漏的對象

  • 1)單擊時間線窗格中的Leaks工具以在詳細信息窗格中顯示與泄漏相關的信息。
  • 2)從詳細信息窗格的導航欄中的詳細類型列表中選擇Leaks。顯示通過回溯的泄漏對象列表。由Backtrace視圖泄漏的視圖按其分配點匯總所有泄漏塊,因為源代碼中的一個錯誤可能導致多次運行時泄漏,因為代碼會重復執行。
  • 3)選擇一個你想調查的對象。
  • 4)單擊對象內存地址旁邊的箭頭,以顯示對象在詳細信息窗格中的內存歷史記錄以及相應的引用計數和方法調用。
  • 5)按Command-3顯示檢查器擴展詳細信息區域中所選對象的堆棧跟蹤。
  • 6)單擊擴展詳細信息區域中的折疊Collapse按鈕以隱藏堆棧跟蹤中的系統調用。這可以更輕松地找到您的應用程序的方法。
  • 7)雙擊堆棧跟蹤中的方法以在儀器中顯示其代碼。
  • 8)單擊詳細信息窗格頂部的Xcode按鈕,以打開Xcode中的代碼進行審閱和編輯。

在您打開Xcode查看正在創建泄漏的代碼后,泄漏的原因可能仍不清楚。 Leaks工具允許您通過使用細節窗格中的Cycles&Roots選項來查看正在創建泄漏的循環。

To investigate a leaked object using cycles and roots - 使用cycles and roots來調查泄漏的對象

  • 1)單擊時間線窗格中的Leaks工具以在詳細信息窗格中顯示與泄漏相關的信息。
  • 2)從詳細信息窗格的導航欄中的詳細類型列表中選擇Cycles & Roots。顯示按周期泄漏的對象列表。
  • 3)選擇一個你想調查的對象。
  • 4)如果可用,請查看該對象的對象圖。
  • 5)單擊對象旁邊的箭頭,以顯示詳細信息窗格中對象的內存歷史記錄,以及相應的引用計數和方法調用。
  • 6)按Command-3顯示檢查器擴展詳細信息區域中所選對象的堆棧跟蹤。
  • 7)單擊擴展詳細信息區域中的折疊Collapse按鈕以隱藏堆棧跟蹤中的系統調用。這可以更輕松地找到您的應用程序的方法。
  • 8)雙擊堆棧跟蹤中的方法以在儀器中顯示其代碼。
  • 9)單擊詳細信息窗格頂部的Xcode按鈕,以打開Xcode中的代碼進行審閱和編輯。

小點:對于使用自動引用計數(ARC)的應用程序,泄漏對象的對象圖視圖有助于引用循環的診斷。通常,解決這些問題的方法是在weak關鍵字的對象圖中標記向上引用。

To investigate a leak using the call tree - 使用調用樹調查泄漏

  • 1)單擊時間線窗格中的Leaks工具以在詳細信息窗格中顯示與泄漏相關的信息。
  • 2)從詳細信息窗格的導航欄中的詳細類型列表中選擇調用樹。顯示與任何檢測到的泄漏相關的方法調用列表。
  • 3)按Command-2顯示檢查器窗格中的顯示設置區域。
  • 4)在Call Tree顯示設置下,選擇Invert Call TreeHide System Libraries。最先顯示最近的方法調用。它還有助于縮小方法調用列表的范圍,使其適用于您的應用。由您的應用進行的方法調用以黑色顯示,并以用戶代碼圖標開頭。
  • 5)選擇您想調查的方法調用。
  • 6)按下Command-3在檢查器的擴展詳細信息區域中顯示所選方法調用的堆棧跟蹤。
  • 7)雙擊堆棧跟蹤中的方法調用以在儀器中顯示其代碼。
  • 8)單擊詳細信息窗格頂部的Xcode按鈕,以打開Xcode中的代碼進行審閱和編輯。

雖然Instruments可以幫助您檢測內存泄漏,但您仍需仔細查看相關的內存歷史記錄和代碼,以確定并解決問題。以下情況是泄漏的常見原因:

  • 當對象不再被引用時,Retain被對象調用,而不調用相應的release
  • 一個對象已被分配并使用不會導致對象自動釋放的API進行初始化。
  • 如果泄漏的不是對象,那么您可能正在調用一個假定擁有malloc創建的內存塊的API,并且您缺少對free()的相應調用。

后記

本篇主要講述了找到內存泄露,感興趣的給個贊或者關注~~~

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容