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

Адрес дезинфицирующего средства: 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 debug)

Подробное описание доступных параметров отладки проблем с собственной памятью см. в разделах «Отладка 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

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

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

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

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