Debuguj wykorzystanie pamięci natywnej

Ś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ż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 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 przypisać natywny pobór pamięci do stosu wywołań w programie. Więcej informacji znajdziesz w  heapprofd – profilowanie stosu na Androidziewitrynie dokumentacji Peretto.

Debugowanie Malloc

Szczegółowe informacje o dostępnych opcjach debugowania problemów z pamięcią natywnej znajdziesz w artykułach Malloc DebugNatywne ś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 funkcji znajdziesz w dokumentacji libmemunreachable.

łapy gromadzące malloc;

Jeśli chcesz stworzyć własne narzędzia, pakiet libc Androida obsługuje też przechwytywanie wszystkich przydziałów/bezpłatnych wywołań, które mają miejsce podczas wykonywania programu. Instrukcje dotyczące korzystania z tego narzędzia 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ż skorzystać z serwera Dalvik Debug Monitor Server (DDMS), aby zobaczyć graficzny widok danych wyjściowych debugowania Malloc.

Aby korzystać z DMS, najpierw włącz interfejs użytkownika pamięci:

  1. Otwórz aplikację ~/.android/ddms.cfg
  2. Dodaj wiersz: native=true

Po ponownym uruchomieniu DDMS i wybraniu procesu możesz przejść na nową kartę przydziału natywnego i zapełnić ją listą alokacji. Jest to szczególnie przydatne przy debugowaniu wycieków pamięci.