Sanitizer adresów: HWASan/ASan
Deweloperzy platform na Androida używają narzędzia HWAddressSanitizer (HWASan), aby znaleźć błędy pamięci w C/C++.
Gotowe obrazy HWASan można wgrywać na obsługiwane urządzenia Pixel ze strony ci.android.com (szczegółowe instrukcje konfiguracji).
Od Androida 8.0 (Oreo) można też używać ASan do debugowania aplikacji w środowisku produkcyjnym bez dostępu do roota urządzenia. Instrukcje znajdziesz w Wiki ASan.Heapprofd
Android 10 obsługuje narzędzie heapprofd, czyli narzędzie do profilowania stosu o małym nakładzie pracy. Za pomocą narzędzia heapprofd możesz przypisać natywny pobór pamięci do stosu wywołań w programie. Zobacz heapprofd – Android Heap Profiler Strona z dokumentacją Perfetto .
Debugowanie metody malloc
Szczegółowe informacje o dostępnych opcjach debugowania problemów z pamięcią natywną znajdziesz w artykułach Malloc Debug i Natywne śledzenie pamięci za pomocą wywołań zwrotnych libc.
libmemunreachables
Biblioteka libmemunreachable Androida to prosty detektor wycieku pamięci, który działa bez wysiłku. Wykorzystuje on nieprecyzyjny mechanizm czyszczenia pamięci, który sprawdza całą pamięć natywnych aplikacji, zgłaszając wszystkie niedostępne bloki jako wycieki. Zobacz libmememunreachable ( są nieosiągalne) dokumentacji.
Haczyki Malloc
Jeśli chcesz utworzyć własne narzędzia, pakiet libc Androida obsługuje też przechwytywanie alokowanych/bezpłatnych wywołań, które mają miejsce podczas realizacji programu. Zobacz malloc_hooki dokumentacji.
Statystyki zarezerwowanej pamięci
Android obsługuje rozszerzenia <malloc.h>
mallinfo(3)
i malloc_info(3)
.
Funkcja malloc_info
jest dostępna w Androidzie 6.0 (Marshmallow) i nowszych wersjach. Schemat XML tej funkcji jest opisany w dokumentacji Bionic: <malloc.h>
.
Serwer Dalvik Debug Monitor Server
Możesz też użyć serwera Dalvik Debug Monitor (DDMS), aby uzyskać graficzny widok danych wyjściowych Malloc Debug.
Aby korzystać z DDMS, najpierw włącz interfejs natywnej pamięci:
- Otwórz aplikację
~/.android/ddms.cfg
- Dodaj wiersz:
native=true
Po ponownym uruchomieniu DDMS i wybraniu procesu możesz przełączyć się na nową alokację natywną i wypełniając ją listą przydziałów. To jest szczególnie przydatne przy debugowaniu wycieków pamięci.