Debuguj wykorzystanie pamięci natywnej

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 DebugNatywne ś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:

  1. Otwórz aplikację ~/.android/ddms.cfg
  2. 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.