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

Дезинфицирующее средство для адресов: HWAsan/ASan

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

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

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

Хиппрофд

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

Отладка Malloc

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

libmemunreachable

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

Крючки Malloc

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

Статистика Маллока

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 и выбора процесса вы можете переключиться на новую вкладку собственного распределения и заполнить ее списком распределений. Это особенно полезно для отладки утечек памяти.