Инструменты обнаружения утечек памяти
-
02-07-2019 - |
Вопрос
Предоставляет ли среда разработки 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
Шаг 1.Выберите инструмент «Распределения»
- Выберите шаблон профилирования для Распределений:
- В главном интерфейсе «Инструменты» нажмите «VM Tracker», если он есть, и нажмите клавишу «Delete», поскольку этот конкретный инструмент вам не понадобится:
Нажав кнопку «плюс» в правом верхнем углу, вы можете добавить дополнительные инструменты для различных видов тестирования, но я не буду описывать их в этом уроке.
Шаг 2.Настройте параметры инструментов
Прежде чем приступить к любому анализу, вам необходимо сделать несколько вещей.Сначала вам необходимо подключить устройство iOS, на котором установлено ваше приложение.Это должно быть физическое устройство, поскольку симулятор iOS по-прежнему является симулятором и может неточно отображать использование памяти в вашем приложении или то, как приложение может работать при нехватке памяти.
Чтобы выбрать цель, нажмите Мой компьютер вверху, наведите указатель мыши на свое устройство и выберите приложение в подменю:
Далее идет панель, где вы можете изменить настройки типов выделений, которые вы будете просматривать.Помимо проверки того, Созданный и постоянный пузырь проверен, вам не нужно ничего делать заранее.
Шаг 3.Нажмите запись, чтобы запустить инструмент
Как только вы нажмете кнопку «Запись» в левом верхнем углу, ваше приложение запустится на вашем устройстве, и «Инструменты» начнут отображать ваши распределения.Все, что вам нужно сделать здесь, — это запустить приложение, сосредоточив внимание на возможных проблемных областях, чтобы увидеть, выделяется ли больше памяти, чем освобождается.Это может означать выполнение множества повторяющихся задач, но позже вы скажете себе спасибо.
Вы должны увидеть что-то вроде этого:
Я рекомендую запустить приложение один раз и достичь стабильной точки в памяти, чтобы у вас был хороший базовый уровень, который сделает любое увеличение заметным.Когда вы убедитесь, что у вас достаточно данных для тестирования, нажмите кнопку «Стоп» в левом верхнем углу.
Шаг 4.Анализировать
- Первое, что я делаю, — это устанавливаю диапазон проверки для измерения общего количества постоянных байтов на моем базовом уровне.Этот постоянный номер байта расположен прямо под сводкой распределения.
Чтобы установить диапазон проверки, используйте сочетание клавиш Команда < для левого диапазона контроля и Команда > для правильного диапазона проверки.В нашем приложении базовый размер составляет около 20 МБ.
- Затем я перемещаю правый диапазон проверки в точку, где я снова запустил приложение и вернулся к нашему корню.Здесь вы можете видеть, что память примерно такая же.Итак, сделав это еще несколько раз и увидев, что ваша память вернулась к исходному состоянию, вы можете предположить, что серьезных проблем с памятью нет.
Существуют разные способы анализа этих данных, которые я не буду здесь рассматривать, но имейте в виду, что существует целое раскрывающееся меню способов просмотра и анализа ваших данных.
Шаг 5.Маркировка поколений
Если вы предпочитаете не слишком много заниматься контрольными диапазонами, есть функция под названием «Генерация меток».Для этого есть кнопка на правой панели инструментов.
Эта кнопка будет отмечать точки на временной шкале инструментов в зависимости от того, где находится линия проверки.Это делается для того, чтобы отслеживать все распределения с момента предыдущей отметки или с самого начала, если других отметок нет.Вы можете отмечать поколения во время работы инструмента распределения или после его остановки, как в этом примере:
Шаг 6.Проверьте трассировку стека
Последнее, что нужно рассмотреть, — это посмотреть трассировку стека.Для этого вам нужно настроить диапазон проверки, чтобы выделить все распределения, а затем просмотреть представление статистики, убедившись, что Созданный и постоянный пузырь выбран на правой панели.В представлении статистики убедитесь, что постоянные байты отсортированы от большего к меньшему.Здесь много выделений, и может быть сложно понять, что происходит, поскольку многие из них являются системными выделениями.
Углубляясь
- Посмотрите на самые крупные распределения и нажмите стрелку вправо.Часто внутри тех, на которые вы нажали, будут выделения, и многие из них не будут иметь для вас значения.
- Выделяя различные распределения после нажатия стрелки, продолжайте просматривать расширенные сведения на правой панели.В конце концов вы встретите жирный текст, ведущий к реальному коду вашего проекта и сообщающий вам, в чем может быть проблема.
- Если вы дважды щелкните один из выделенных жирным шрифтом элементов в трассировке стека, вы перейдете к реальному коду (при условии, что вы выполнили выделение в принадлежащем вам приложении).
В этом представлении есть много полезных вещей, одна из которых — преимущественно желтые теги справа, показывающие, сколько памяти занимает каждый вызов метода.Каждое приложение отличается, поэтому вы, как разработчик, должны решить, является ли выделенный метод проблемой, чем-то, что вы можете оптимизировать, или это просто неизбежная часть вашего приложения.
В моем случае эта переменная UIColor является постоянной и используется во всем нашем приложении и, следовательно, приемлема на протяжении всего срока службы нашего приложения.