2008-09-27 218 views
61

Apple的Xcode開發環境是否提供任何內存泄漏檢測工具?內存泄漏檢測工具

我對適用於iPhone SDK的工具特別感興趣。目前我最喜歡的業餘愛好編程平臺

上述工具的文檔/教程將非常有幫助。

回答

63

運行在Xcode工具有一個專門打電話Leaks和像以前的海報說,運行它的最簡單的方法是直接從Xcode的:

運行 - >啓動與性能工具 - >泄漏

它在檢測內存泄漏方面看起來非常好,對於像我這樣的Non-C Head來說,很容易找出。

4

ObjectAlloc和MallocDebug應該對你有幫助。如果您安裝了整個SDK,可以在Developer-> Applications-> Performance Tools中找到它們。

他們的名字給你一個很好的線索,就其功能而言,OA跟蹤對象的創建,MA是一個通用的內存泄漏工具。

我還沒有嘗試過iPhone開發,但我必須相信他們也會在那裏工作。從在Xcode 6 Product菜單啓動蘋果的儀器工具Instruments User Guide

+0

如何安裝整個SDK? – 2012-06-06 04:29:56

25

選擇Profile

假設你已經註冊了ADC iPhone開發者網站,這裏的鏈接可循。 (該應用程序位於Xcode應用程序的包內容中:/Applications/Xcode.app/Contents/Applications/

商業替代方案是 OmniObjectMeter(由奧姆尼集團已停產)

+2

OmniObjectMeter現在可以免費下載。 – Tony 2011-03-25 10:50:18

+2

是否有關於如何使用Apple的樂器的教程? – 2011-06-19 08:56:28

+1

@nute:看看蘋果網站上的WWDC視頻。 – titaniumdecoy 2012-02-24 17:14:01

6

您可以通過menu -> run -> start with performance tool -> ...

3

enter image description here

步驟1.挑選分配儀器

  1. 選擇用於分配的性能測試模板:

enter image description here

  • 在主儀器界面,單擊虛擬機跟蹤器(如果存在),然後按Delete鍵,因爲您不需要該特定儀器:
  • enter image description here

    通過點擊右上角的加號按鈕,你可以添加更多的儀器不同類型的測試,但我不會在本教程中覆蓋它們。

    第2步:設置您的儀器設置

    運行任何分析之前,有你需要做的幾件事情。首先,您需要插入安裝了應用程序的iOS設備。它必須是物理設備,因爲iOS模擬器仍然是模擬器,可能無法準確地表示應用程序中的內存使用情況,或者應用程序在內存壓力下的表現。

    來挑選你的目標,單擊頂部附近我的電腦,將鼠標懸停在您的設備,然後選擇您的應用程序從子菜單:

    enter image description here

    其次,有一個面板,您可以更改您將查看的分配類型的設置。除了確保創建&持續泡沫被檢查,你沒有太多需要事先做。

    enter image description here

    步驟3.按記錄運行儀器

    一旦按下左上角錄製按鈕,您的應用程序將啓動您的設備上,並且儀器將開始圖表你的分配。您需要在此處執行的操作是通過您的應用程序執行的,重點討論可能的問題區域,以查看是否有更多的內存分配而不是釋放。這可能意味着做了很多重複的任務,但是稍後你會感謝你自己。

    您應該看到這樣的事情:

    enter image description here

    我建議通過您的應用程序運行一次,以獲得一個穩定的點在內存中,以便你有一個很好的基礎,這將使任何增加明顯。當您滿意時,您有足夠的數據進行測試,請按左上方的停止按鈕。

    步驟4.分析

    1. 我做的第一件事情就是把我的檢查範圍來衡量我的基線總持續字節。該持久字節號位於分配摘要的正下方。

    enter image description here

    實際設置的檢查範圍,使用鍵盤快捷鍵命令<左檢查範圍和命令>爲正確的檢查範圍。在我們的應用程序中,我們的基線大約爲20MB。

    enter image description here

  • 然後,我將我的右檢查範圍內,我已經通過應用程序再次運行,回來給我們的根點。在這裏,你可以看到內存大致相同。所以,通過再做幾次這樣的事情,看到你的記憶回到我們的基線,你可以假設沒有重大的記憶問題。
  • enter image description here

    有分析這個數據,我將不包括在這裏,但要注意,有方式來查看和分析數據的整體下拉菜單中選擇不同的方式。

    enter image description here

    第5步標誌代

    如果你不喜歡對付檢查的範圍爲多,有一個叫馬克生成功能。儀器的右側面板上有一個按鈕。

    enter image description here

    該按鈕將根據在檢查線上是標記儀器的時間軸上的點。它是這樣做的,以便跟蹤自上一個商標以來的所有分配,或者如果沒有其他商標則從頭開始。當你運行的是分配工具可以標記代或已經停止運行後,如本例:

    enter image description here

    步驟6.檢查出來的堆棧跟蹤

    的最後一件事以覆蓋正在看堆棧跟蹤。對於這一點,你要設置你的檢查範圍,以突出顯示所有的分配,然後看看統計數據視圖,確保創建&持續泡在右側面板中選擇。在統計視圖中,確保持久字節從最高到最低排序。這裏有很多分配的,它可以是很難理解到底是怎麼回事,因爲他們中的很多都是系統分配。

    enter image description here

    去深

    1. 看最大的分配,然後點擊右向箭頭。很多時候在你點擊的內容中會有分配,其中很多對你沒有意義。

    enter image description here

  • 在突出顯示點擊的箭頭後不同分配,繼續尋找正確的面板上的擴展的細節。最終你會遇到一些粗體的文本,這會導致項目中的實際代碼,告訴你這個問題可能是什麼。
  • enter image description here

  • 如果雙擊堆棧跟蹤大膽的項目之一,它會帶你到實際的代碼(假設你跑的分配你擁有的應用程序)。
  • enter image description here

  • 有一個關於這個觀點,一個是右側的大多是黃色的標籤,以顯示你很多有用的東西到底有多少內存每個方法調用正在接受。每個應用程序是不同的,所以你的開發者,有權決定是否加亮的方法是一個問題,有些東西你可以優化,或者您的應用程序只是一個不可避免的一部分。

  • 在我的情況下,變量的UIColor的東西,是持久的,在我們的應用中使用,因此,在我們的應用程序的生命可以接受的。

  • found here