Debugowanie użycia pamięci natywnej

Odkażacz adresu: HWASan/ASan

Deweloperzy platformy Android używają HWAddressSanitizer (HWASan) do znajdowania błędów pamięci w C/C++.

Możesz przesłać gotowe obrazy HWASan do obsługiwanych urządzeń Pixel ze strony ci.android.com ( szczegółowe instrukcje konfiguracji ).

Od wersji Androida 8.0 (Oreo) można również używać ASan do debugowania aplikacji na nierootowanych urządzeniach produkcyjnych. Możesz znaleźć instrukcje na wiki ASan .

Heapprofd

Android 10 obsługuje heapprofd, profiler sterty próbkowania o niskim nakładzie pracy. heapprofd umożliwia przypisanie użycia pamięci natywnej do stosów wywołań w twoim programie. Zobacz heapprofd — Android Heap Profiler w witrynie dokumentacji Perfetto, aby uzyskać więcej informacji.

Debugowanie Malloc

Zobacz debugowanie Malloc iśledzenie pamięci natywnej przy użyciu wywołań zwrotnych libc , aby uzyskać dokładny opis opcji debugowania dostępnych w przypadku problemów z pamięcią natywną.

libmmunosiągalny

libmemunreachable systemu Android to wykrywacz wycieków pamięci natywnej z zerowym obciążeniem. Używa nieprecyzyjnego modułu zbierającego śmieci typu mark-and-sweep, który przechodzi przez całą pamięć natywną, zgłaszając wszelkie nieosiągalne bloki jako wycieki. Zobacz dokumentację libmemunreachable, aby uzyskać instrukcje użytkowania.

Haki Malloc

Jeśli chcesz zbudować własne narzędzia, biblioteka libc systemu Android obsługuje również przechwytywanie wszystkich wywołań alokacji/wolnych, które mają miejsce podczas wykonywania programu. Zobacz dokumentację malloc_hooks, aby uzyskać instrukcje użytkowania.

Statystyki Malloc

Android obsługuje rozszerzenia mallinfo(3) i malloc_info(3) do <malloc.h> . Funkcja malloc_info jest dostępna w systemie Android 6.0 (Marshmallow) i nowszych, a jej schemat XML jest udokumentowany w <malloc.h> firmy Bionic.

Serwer monitorowania debugowania Dalvik

Możesz również użyć serwera Dalvik Debug Monitor Server (DDMS), aby uzyskać graficzny widok danych wyjściowych debugowania Malloc.

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

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

Po ponownym uruchomieniu DDMS i wybraniu procesu możesz przejść do nowej karty alokacji natywnej i wypełnić ją listą alokacji. Jest to szczególnie przydatne do debugowania wycieków pamięci.