Вопрос

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

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

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

Это было полезно?

Решение

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

запустить -> Запустить с помощью инструмента производительности -> Утечки

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

Другие советы

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

Коммерческая альтернатива – это ОмниОбъектМетер. (Снято с производства Omni Group)

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

Вот ссылка для использования инструмента из xcode для обнаружения утечки памяти/производительности вашего приложения ios/mac.Шаги по запуску инструмента из Xcode

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

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

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

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

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

ObjectAlloc и MallocDebug должны вам помочь.Если вы установили весь SDK, они будут найдены в разделе «Разработчик» -> «Приложения» -> «Инструменты производительности».

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

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

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

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

Подвел итоги по основным инструментам утечки памяти: iphone-essential-performance-tools-list

Попробуйте также это простое руководство для начала работы с инструментами Xcode.

Инструмент утечки памяти: http://www.raywenderlich.com/2696/

Базовый: http://www.raywenderlich.com/23037/how-to-use-instruments-in-xcode

enter image description here

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

  1. Выберите шаблон профилирования для Распределений:

enter image description here

  1. В главном интерфейсе «Инструменты» нажмите «VM Tracker», если он есть, и нажмите клавишу «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

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

enter image description here

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

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

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

enter image description here

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

enter image description here

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

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

нашел здесь

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top