Debugowanie użycia pamięci natywnej

Adres Sanitizer: HWASan/ASan

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

Gotowe obrazy HWASan można przesyłać do obsługiwanych urządzeń Pixel ze strony ci.android.com ( szczegółowe instrukcje dotyczące konfiguracji ).

Od Androida 8.0 (Oreo) możliwe jest również używanie ASan do debugowania aplikacji na nierootowanych urządzeniach produkcyjnych. Instrukcje można znaleźć na wiki ASan .

Heapprofd

Android 10 obsługuje heapprofd, narzędzie do profilowania sterty próbkowania o niskim narzucie. heapprofd pozwala przypisać użycie 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 Malloca

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

libmemunreachable

Libmemunreachable na Androida to natywny wykrywacz wycieków pamięci bez narzutów. Wykorzystuje nieprecyzyjny proces zbierania elementów bezużytecznych typu mark-and-sweep, który przechodzi przez całą natywną pamięć, zgłaszając wszelkie nieosiągalne bloki jako wycieki. Zobacz dokumentację libmemunreachable , aby uzyskać instrukcje użytkowania.

Haczyki Malloc

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

Statystyki Malloca

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 pliku <malloc.h> firmy Bionic.

Serwer monitorowania debugowania Dalvik

Możesz także użyć Dalvik Debug Monitor Server (DDMS), aby uzyskać graficzny widok wyników Malloc Debug.

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

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

Po ponownym uruchomieniu DDMS i wybraniu procesu możesz przełączyć się na nową kartę alokacji natywnej i wypełnić ją listą alokacji. Jest to szczególnie przydatne do debugowania wycieków pamięci.