Адрес дезинфицирующего средства: HWASan/ASan
Разработчики платформы Android используют HWAddressSanitizer (HWASan) для поиска ошибок памяти в C/C++.
Вы можете прошивать готовые образы HWASan на поддерживаемые устройства Pixel с сайта ci.android.com ( подробные инструкции по установке ).
Начиная с Android 8.0 (Oreo), ASan также можно использовать для отладки приложений на устройствах без root-доступа. Инструкции можно найти на вики ASan .Heapprofd
Android 10 поддерживает heapprofd — профилировщик кучи с малыми накладными расходами, работающий с выборкой. heapprofd позволяет сопоставлять использование нативной памяти со стеками вызовов в вашей программе. Подробнее см. в разделе heapprofd — профилировщик кучи Android на сайте документации Perfetto .
Отладка Malloc
Подробное описание доступных вариантов отладки для решения проблем с собственной памятью см. в разделе Отладка Malloc и отслеживание собственной памяти с использованием обратных вызовов libc.
libmemunreachable
Библиотека libmemunreachable в Android — это детектор утечек памяти с нулевыми накладными расходами. Она использует неточный сборщик мусора по принципу «отметить и очистить» для всей нативной памяти, сообщая о любых недоступных блоках как об утечках. Инструкции по использованию см. в документации по libmemunreachable .
Хуки Malloc
Если вы хотите создать собственные инструменты, библиотека 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 Debug Monitor Server (DDMS) для получения графического представления выходных данных Malloc Debug.
Чтобы использовать DDMS, сначала включите его собственный пользовательский интерфейс памяти:
- Откройте
~/.android/ddms.cfg
- Добавьте строку:
native=true
После перезапуска DDMS и выбора процесса вы можете переключиться на новую вкладку выделения памяти и заполнить её списком выделений. Это особенно полезно для отладки утечек памяти.