Отладка использования собственной памяти

Адрес дезинфицирующего средства: HWASan/ASan

Разработчики платформы Android используют HWAddressSanitizer (HWASan) для поиска ошибок памяти в C/C++.

Вы можете прошивать готовые образы HWASan на поддерживаемые устройства Pixel с сайта ci.android.com ( подробные инструкции по установке ).

Начиная с Android 8.0 (Oreo) также возможно использовать ASan для отладки приложений на нерутированных производственных устройствах. Инструкции можно найти на вики ASan .

Heapprofd

Android 10 поддерживает heapprofd, профилировщик кучи с низкими издержками и выборкой. heapprofd позволяет вам приписывать использование собственной памяти стекам вызовов в вашей программе. Для получения дополнительной информации см. heapprofd - Android Heap Profiler на сайте документации Perfetto .

отладка Malloc

Подробное описание параметров отладки, доступных для решения проблем с собственной памятью, см. в разделе Отладка Malloc и отслеживание собственной памяти с использованием обратных вызовов libc.

libmeunreachable

libmemunreachable Android — это детектор утечек памяти с нулевыми издержками. Он использует неточный сборщик мусора «отметить и очистить» для всей собственной памяти, сообщая о любых недостижимых блоках как об утечках. Инструкции по использованию см. в документации libmemunreachable .

Хуки Маллока

Если вы хотите создать свои собственные инструменты, libc Android также поддерживает перехват всех вызовов выделения/освобождения, которые происходят во время выполнения программы. Инструкции по использованию см. в документации malloc_hooks .

Статистика Malloc

Android поддерживает расширения mallinfo(3) и malloc_info(3) для <malloc.h> . Функция malloc_info доступна в Android 6.0 (Marshmallow) и выше, а ее XML-схема задокументирована в <malloc.h> Bionic.

Сервер мониторинга отладки Dalvik

Вы также можете использовать сервер мониторинга отладки Dalvik (DDMS) для получения графического представления выходных данных отладки Malloc.

Чтобы использовать DDMS, сначала включите его собственный пользовательский интерфейс памяти:

  1. Откройте ~/.android/ddms.cfg
  2. Добавьте строку: native=true

После перезапуска DDMS и выбора процесса вы можете переключиться на новую вкладку выделения памяти и заполнить ее списком выделений. Это особенно полезно для отладки утечек памяти.