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

Дезинфицирующее средство для адресов: 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 .

Маллок крючки

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

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

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

Сервер Dalvik Debug Monitor

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

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

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

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