簡體   English   中英

查找和調試廢棄的內存和堆增長的提示

[英]Tips for finding and debugging abandoned memory and heap growth

我最近觀看了WWDC 2010視頻之一:第311節-使用儀器進行高級內存分析。 鏈接在這里

視頻中有一個有趣的示例,用於查找“廢棄的內存”。 他們說,調試通常比泄漏更重要,但可能更困難。

放棄的內存定義為“不再使用的可訪問已分配內存”。

泄漏定義為“無法再訪問的已分配內存”。

查找“廢棄內存”的主要方法是使用“分配”工具進行堆快照。

但是,在確定我已經放棄了代碼中的內存之后,我發現實際上很難確切地知道它的來源。

我正在尋找一些不錯的技巧或資源來查找“廢棄的內存”。

謝謝!

在Instruments中,您可以為堆快照標識的任何對象獲取調用堆棧。 屏幕截圖:

使用儀器跟蹤廢棄的內存

因此,這里是一個人為的情況,我每次用戶點擊按鈕時都會分配一個1MB的NSMutableData。 在中間底部的窗格中,我有4個堆快照,並且展開了一個以顯示自上次堆快照以來已創建但尚未釋放的對象。 我突出顯示了1.25MB的“非對象”分配,在右窗格中,它向我顯示了發生此分配的確切調用堆棧。 關於右側面板的一個技巧是底部的滑塊-它控制着消除堆疊框架。 如果要查看所有堆棧框架,請將其一直拖動到右側。 灰色框架是您沒有源代碼的框架,非灰色框架是您的代碼(或同時具有符號和源代碼的代碼)。(此外,如果您沒有看到右,單擊工具欄中的“查看”按鈕。)您還在尋找其他信息嗎?

總結bbum的精彩博客文章

  1. 使用樂器分析您的應用
  2. 使用分配模板
  3. 當應用未運行時,單擊“分配”跟蹤標題旁邊的小號i,然后選中“ 記錄引用計數” 這將使您知道保留項目的位置,而不僅僅是分配它們的位置。
  4. 運行您的應用程序,執行某些操作,然后返回默認狀態。 例如,打開一個新的文檔窗口,然后將其關閉。
  5. 單擊樂器中的“標記堆”按鈕。
  6. 重復步驟4和5幾次。

在Instruments中查看分配時,可以單擊右箭頭按鈕查看該實例的事件歷史記錄,包括分配,保留,釋放和自動釋放的所有位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM