Depurando o uso da memória nativa

Desinfetante de endereço: HWASan/ASan

Os desenvolvedores da plataforma Android usam HWAddressSanitizer (HWASan) para encontrar erros de memória em C/C++.

Você pode fazer o flash de imagens HWASan pré-construídas para dispositivos Pixel suportados em ci.android.com ( instruções detalhadas de configuração ).

Desde o Android 8.0 (Oreo), também é possível usar o ASan para depurar aplicativos em dispositivos de produção não enraizados. Você pode encontrar instruções no wiki do ASan .

Heapprofd

O Android 10 é compatível com heapprofd, um criador de perfil de heap de amostragem de baixa sobrecarga. heapprofd permite que você atribua o uso de memória nativa a pilhas de chamadas em seu programa. Consulte heapprofd - Android Heap Profiler no site de documentação do Perfetto para obter mais informações.

Depuração de Malloc

Consulte Malloc Debug andNative Memory Tracking using libc Callbacks para obter uma descrição completa das opções de depuração disponíveis para problemas de memória nativa.

libmemunalcançável

O libmemunreachable do Android é um detector de vazamento de memória nativo com zero sobrecarga. Ele usa um coletor de lixo de marcação e varredura impreciso que passa por toda a memória nativa, relatando quaisquer blocos inacessíveis como vazamentos. Consulte a documentação do libmemunreachable para obter instruções de uso.

Ganchos Malloc

Se você quiser construir suas próprias ferramentas, a libc do Android também suporta a interceptação de todas as chamadas de alocação/livres que acontecem durante a execução do programa. Consulte a documentação do malloc_hooks para obter instruções de uso.

Estatísticas de Malloc

O Android suporta as mallinfo(3) e malloc_info(3) para <malloc.h> . A função malloc_info está disponível no Android 6.0 (Marshmallow) e superior e seu esquema XML está documentado no <malloc.h> da Bionic.

Servidor Dalvik Debug Monitor

Você também pode usar o Dalvik Debug Monitor Server (DDMS) para obter uma visualização gráfica da saída do Malloc Debug.

Para usar o DDMS, primeiro ative sua IU de memória nativa:

  1. Abra ~/.android/ddms.cfg
  2. Adicione a linha: native=true

Ao reiniciar o DDMS e selecionar um processo, você pode alternar para a nova guia de alocação nativa e preenchê-la com uma lista de alocações. Isso é especialmente útil para depurar vazamentos de memória.