Советы по поиску и отладке заброшенной памяти и росту кучи - PullRequest
7 голосов
/ 25 октября 2010

Недавно я посмотрел одно из видеороликов WWDC 2010: Сессия 311. Расширенный анализ памяти с помощью инструментов. Ссылка здесь .

В видео есть интересный пример поиска «Заброшенной памяти». Говорят, что отладку зачастую важнее, чем утечки, но это может быть сложнее.

Заброшенная память определяется как «Доступная выделенная память, которая никогда не используется снова».

Утечка определяется как «Выделенная память, которая больше не может быть достигнута».

Основной способ найти «Заброшенную память» - сделать кучу снимков с помощью инструмента «Выделение».

Однако после определения того, что я оставил память в своем коде, я обнаружил, что действительно трудно точно определить, откуда она исходит.

Я ищу несколько полезных советов или ресурсов для поиска Заброшенной памяти.

Спасибо!

Ответы [ 2 ]

5 голосов
/ 22 ноября 2011

В Instruments вы можете получить стек вызовов для любого объекта, идентифицированного с помощью heapshot.Снимок экрана:

Using Instruments to track abandoned memory

Итак, что мы получили, это надуманный случай, когда я выделяю 1MB NSMutableData каждый раз, когда пользователь нажимает кнопку.В центральной нижней панели у меня есть 4 heapshots, и у меня есть один расширенный, чтобы показать объекты, которые были созданы, но не выпущены с момента последнего heapshot.Я выделил 1,25 МБ «необъектного» выделения, и на правой панели он показывает мне точный стек вызовов, где это распределение произошло.Один трюк с этой панелью справа - ползунок внизу - он контролирует удаление кадров стека.Если вы хотите увидеть все кадры стека, перетащите его вправо.Серые кадры - это те, для которых у вас нет исходного кода, а не серые кадры - это ваш код (или код, для которого у вас есть и символы, и источник). (Кроме того, если вы не видите панель направильно, проверьте кнопки «Вид» на панели инструментов.) Какую другую информацию вы ищете?

1 голос
/ 15 декабря 2012

Подводя итог отличное сообщение в блоге bbum :

  1. Профилируйте ваше приложение с помощью инструментов
  2. Используйте шаблон Allocations
  3. Когда приложение не запущено, нажмите маленький значок рядом с заголовком дорожки распределений и отметьте Счетчик ссылок на записи ;это позволит вам узнать, где хранятся элементы, а не только то, где они расположены.
  4. Запустите приложение, сделайте что-нибудь, а затем вернитесь в состояние по умолчанию.Например, откройте новое окно документа, затем закройте его.
  5. Нажмите кнопку «Отметить кучу» в инструментах.
  6. Повторите шаги 4 и 5 несколько раз.

Когда вы просматриваете распределения в Инструментах, вы можете нажать кнопку со стрелкой вправо, чтобы просмотреть историю событий для этого экземпляра, включая все места, в которых он был распределен, сохранен, освобожден и автоматически выпущен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...