Средства обнаружения утечки памяти

Создает ли среда разработки Apple Xcode какие-либо инструменты для обнаружения утечки памяти?

Мне особенно интересны инструменты, которые применяются к iPhone SDK. В настоящее время моя любимая платформа для проектов программирования хобби

Документация/учебники для указанных инструментов были бы очень полезными.

Ответ 1

Существует один специально названный Leaks и, как и предыдущий плакат, самый простой способ запустить его прямо из Xcode:

run → Начать с Performance Tool → Leaks

Кажется очень хорошим в обнаружении утечек памяти, и было легко для Не-C Head, как я, чтобы понять.

Ответ 2

Выберите Profile в меню Product в Xcode 6, чтобы запустить инструмент Apple Instruments. (Приложение находится внутри содержимого пакета приложения Xcode: /Applications/Xcode.app/Contents/Applications/)

Коммерческая альтернатива OmniObjectMeter. (снято с производства группой Omni)

Ответ 3

Clang Static Analyser отлично подходит для поиска ошибок в C, С++ и Objective-C code:

Ответ 4

Вы можете запускать инструменты в Xcode через menu -> run -> start with performance tool -> ...

Ответ 6

Создает ли среда разработки Apple Xcode какие-либо инструменты для обнаружения утечки памяти?

Мне особенно интересны инструменты, которые применяются к iPhone SDK.

Да. Apple называет их "Инструменты" (там больше, чем просто инструменты памяти).

См. Apple Introduction to Instruments User Guide. В частности, см. Locating Memory Issues in Your App. В нем приводятся примеры использования шаблонов трассировки, ориентированных на память.

Ответ 7

ObjectAlloc и MallocDebug должны помочь вам. Если вы установили весь SDK, они будут найдены в Developer- > Applications- > Performance Tools.

Их имена дают вам довольно хороший ключ к их функциям, OA, отслеживают создание объектов, а MA - средство общей утечки памяти.

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

Предполагая, что вы зарегистрировались на сайте разработчика ADC для iPhone, вот ссылка: Instruments User Guide

Ответ 8

При использовании rustyshelf solution убедитесь, что вы тестируете на iPhone, а не на симуляторе. Использование памяти существенно отличается.

Ответ 11

введите описание изображения здесь

Шаг 1. Выберите инструмент "Распределения"

  • Выберите шаблон профилирования для Allocations:

введите описание изображения здесь

  1. В главном интерфейсе "Инструменты" нажмите "Отследитель VM", если он есть, и нажмите клавишу "Удалить", так как вам не понадобится этот конкретный инструмент:

введите описание изображения здесь

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

Шаг 2. Настройте параметры ваших инструментов

Прежде чем запускать какой-либо анализ, вам нужно сделать несколько вещей. Во-первых, вам нужно подключить устройство iOS, на котором установлено ваше приложение. Это должно быть физическое устройство, потому что iOS Simulator по-прежнему является симулятором и может не точно отображать использование памяти в вашем приложении или как приложение может работать под давлением памяти.

Чтобы выбрать цель, нажмите Мой компьютер вверху, наведите указатель мыши на свое устройство и выберите свое приложение из подменю:

введите описание изображения здесь

Далее появится панель, в которой вы можете изменить настройки типов распределений, которые вы будете просматривать. Кроме того, убедитесь, что флажок Создано и Постоянно отмечен, вам нечего делать заранее.

введите описание изображения здесь

Шаг 3. Нажмите запись, чтобы запустить инструмент

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

Вы должны увидеть что-то вроде этого:

введите описание изображения здесь

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

Шаг 4. Анализ

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

введите описание изображения здесь

Чтобы установить диапазон проверки, используйте комбинацию клавиш Команда < для левого диапазона контроля и Командa > для правильного диапазона контроля. В нашем приложении у нас есть базовый уровень около 20 МБ.

введите описание изображения здесь

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

введите описание изображения здесь

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

введите описание изображения здесь

Шаг 5. Маркировка поколений

Если вы предпочитаете не иметь дело с диапазонами проверок, то есть функция Mark Generation. На правой панели инструментов есть кнопка.

введите описание изображения здесь

Эта кнопка будет отмечать точки на временной шкале инструментов на основе того, где находится контрольная линия. Он делает это, чтобы отслеживать все распределения с предыдущего знака или с самого начала, если нет других меток. Вы можете отмечать поколения, когда вы запускаете инструмент распределения или после того, как вы остановили выполнение, как в этом примере:

введите описание изображения здесь

Шаг 6. Проверьте трассировку стека

Последнее, что нужно рассмотреть, - смотреть на трассировку стека. Для этого вы хотите установить диапазон проверок, чтобы выделить все распределения, а затем просмотреть представление статистики, убедившись, что на правой панели выбран пузырь Создано и Постоянно. В представлении статистики убедитесь, что Persistent Bytes отсортированы с самого высокого на самый низкий. Здесь много распределений, и может быть трудно понять, что происходит, поскольку многие из них являются системными распределениями.

введите описание изображения здесь

Глубокая глубина

  • Посмотрите на наибольшие распределения и щелкните правой стрелкой. Много раз там будут выделения внутри тех, на которые вы нажали, и многие из них не будут иметь для вас значения.

введите описание изображения здесь

  1. Когда вы выделяете различные выделения после нажатия стрелки, продолжайте рассматривать расширенные детали на правой панели. В конце концов вы встретите какой-то полужирный текст, который приведет к фактическому коду в вашем проекте, сообщив вам, в чем проблема.

введите описание изображения здесь

  1. Если вы дважды щелкните один из полужирных элементов в трассировке стека, он перенесет вас в фактический код (при условии, что вы выполнили выделение в собственном приложении).

введите описание изображения здесь

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

  2. В моем случае эта переменная UIColor является постоянным и используется во всем нашем приложении и поэтому является приемлемой на протяжении всего нашего приложения.

найдено здесь