Debugowanie użycia pamięci natywnej

Adres środka dezynfekującego: HWASan/ASan

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

Możesz flashować gotowe obrazy HWASan na obsługiwanych urządzeniach Pixel ze strony ci.android.com ( szczegółowe instrukcje konfiguracji ).

Od wersji 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, profiler sterty próbkujący o niskim nakładzie pracy. heapprofd pozwala przypisać użycie pamięci natywnej do stosów wywołań w programie. Aby uzyskać więcej informacji, zobacz heapprofd — Android Heap Profiler w witrynie dokumentacji Perfetto .

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ą.

biblioteka libmemunreachable

Libmemunreachable dla Androida to natywny detektor wycieków pamięci o zerowym obciążeniu. Używa nieprecyzyjnego modułu zbierającego elementy bezużyteczne typu „znacz i przeciągnij” po całej pamięci natywnej, zgłaszając wszelkie nieosiągalne bloki jako wycieki. Instrukcje użytkowania można znaleźć w dokumentacji libmemunreachable .

Haczyki Malloc

Jeśli chcesz zbudować własne narzędzia, biblioteka libc systemu Android obsługuje także przechwytywanie wszystkich wywołań alokacyjnych/bezpłatnych, które mają miejsce podczas wykonywania programu. Instrukcje użytkowania można znaleźć 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 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żna także użyć serwera Dalvik Debug Monitor Server (DDMS), aby uzyskać graficzny widok wyników debugowania Malloc.

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

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

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