Address Sanitizer: HWASan/ASan
Deweloperzy platformy Android używają HWAddressSanitizer (HWASan) do znajdowania błędów pamięci w językach 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 urządzeniach produkcyjnych bez roota. Instrukcje znajdziesz w wiki ASan.Heapprofd
Android 10 obsługuje heapprofd, czyli profiler sterty z niskim narzutem, który działa na zasadzie próbkowania. Umożliwia on przypisywanie wykorzystania pamięci natywnej do stosów wywołań w programie. Więcej informacji znajdziesz w artykule heapprofd – profiler sterty Androida w witrynie dokumentacji Perfetto.
Debugowanie metodą malloc
Szczegółowy opis opcji debugowania problemów z pamięcią natywną znajdziesz w artykułach Debugowanie funkcji malloc i Śledzenie pamięci natywnej za pomocą wywołań zwrotnych biblioteki libc.
libmemunreachable
Biblioteka libmemunreachable na Androidzie to wykrywacz wycieków pamięci natywnej o zerowym obciążeniu. Wykorzystuje on niedokładne oznaczanie i usuwanie nieużywanych obiektów w całej pamięci natywnej, zgłaszając wszystkie nieosiągalne bloki jako wycieki. Instrukcje użytkowania znajdziesz w dokumentacji biblioteki libmemunreachable.
Funkcje malloc
Jeśli chcesz tworzyć własne narzędzia, biblioteka libc w Androidzie obsługuje też przechwytywanie wszystkich wywołań funkcji przydzielania i zwalniania pamięci, które występują podczas wykonywania programu. Instrukcje użytkowania znajdziesz w dokumentacji malloc_hooks.
Statystyki malloc
Android obsługuje rozszerzenia mallinfo(3)
i malloc_info(3)
do <malloc.h>
.
Funkcja malloc_info
jest dostępna na Androidzie 6.0 (Marshmallow) i nowszym, a jej schemat XML jest udokumentowany w <malloc.h>
Bionic.
Serwer monitora debugowania Dalvik
Możesz też użyć serwera monitora debugowania Dalvik (DDMS), aby uzyskać graficzny widok danych wyjściowych debugowania Malloc.
Aby używać DDMS, najpierw włącz jego natywny interfejs pamięci:
- Otwórz aplikację
~/.android/ddms.cfg
- Dodaj wiersz:
native=true
Po ponownym uruchomieniu DDMS i wybraniu procesu możesz przejść na nową kartę alokacji natywnej i wypełnić ją listą alokacji. Jest to szczególnie przydatne podczas debugowania wycieków pamięci.