Środek do dezynfekcji rąk: HWASan/ASan
Deweloperzy platformy Android używają narzędzia HWAddressSanitizer (HWASan) do znajdowania błędów pamięci w języku C/C++.
Gotowe obrazy HWASan możesz wgrać 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 na produkcyjnych urządzeniach z Androidem, które nie mają uprawnień roota. Instrukcje znajdziesz w wiki ASANA.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 przypisywać zużycie pamięci natywnej do stosów wywołań w programie. Więcej informacji znajdziesz w heapprofd – profilowanie stosu na Androidzie w dokumentacji Perfeto.
Debugowanie małej pamięci
Szczegółowe informacje o dostępnych opcjach debugowania problemów z pamięcią natywnej znajdziesz w artykułach Malloc Debug i Natywne śledzenie pamięci za pomocą wywołań zwrotnych libc.
libmemunreachable
Biblioteka libmemunreachable na Androidzie to bezpłatne narzędzie do wykrywania wycieków pamięci natywnej. Wykorzystuje on nieprecyzyjny mechanizm usuwania nieużywanych danych, który sprawdza całą pamięć natywnych aplikacji, zgłaszając wszystkie niedostępne bloki jako wycieki. Instrukcje dotyczące korzystania z tej biblioteki znajdziesz w dokumentacji libmemunreachable.
łapy malloc,
Jeśli chcesz tworzyć własne narzędzia, biblioteka libc na Androida umożliwia również przechwytywanie wszystkich wywołań alokacji/zwalniania, które występują podczas wykonywania programu. Instrukcje dotyczące korzystania z tej funkcji znajdziesz w dokumentacji malloc_hooks.
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
Możesz też użyć serwera Dalvik Debug Monitor (DDMS), aby uzyskać graficzny widok danych wyjściowych Malloc Debug.
Aby korzystać z DMS, najpierw włącz interfejs pamięci:
- Otwórz aplikację
~/.android/ddms.cfg
- Dodaj linię:
native=true
Po ponownym uruchomieniu DDMS i wybraniu procesu możesz przejść na nową kartę domyślnej alokacji i wypełnić ją listą alokacji. Jest to szczególnie przydatne podczas debugowania wycieków pamięci.