Адрес дезинфицирующего средства: 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 сначала включите его собственный интерфейс управления памятью:
- Откройте файл
~/.android/ddms.cfg - Добавьте строку:
native=true
После перезапуска DDMS и выбора процесса вы можете переключиться на новую вкладку «Выделение памяти» и заполнить ее списком выделенных областей памяти. Это особенно полезно для отладки утечек памяти.