Depurar seu projeto

Depurar falhas nativas

Se você está com dificuldades para entender um despejo de falha nativa ou Tombstone, a página Depurar códigos nativos da Plataforma Android pode ser uma boa introdução.

Para ver um catálogo mais completo de tipos comuns de falhas e aprender a analisá-las, consulte Diagnosticar falhas nativas.

A ferramenta ndk-stack pode ajudar a simbolizar as falhas. Você pode depurar falhas no Android Studio, conforme descrito na documentação geral Depurar seu app. Caso você prefira usar a linha de comando, o ndk-gdb permite anexar gdb ou lldb usando o shell.

Fornecer acesso direto aos rastros de tombstone

A partir do Android 12 (nível 31 da API), é possível acessar o Tombstone de falha nativa do app como um buffer de protocolo usando o método ApplicationExitInfo.getTraceInputStream(). O buffer de protocolo é serializado usando este esquema. Antes, a única maneira de acessar essas informações era pelo Android Debug Bridge (adb).

Veja um exemplo de como implementar esse comportamento no app:

ActivityManager activityManager: ActivityManager = getSystemService(Context.ACTIVITY_SERVICE);
MutableList<ApplicationExitInfo> exitReasons = activityManager.getHistoricalProcessExitReasons(/* packageName = */ null, /* pid = */ 0, /* maxNum = */ 5);
for (ApplicationExitInfo aei: exitReasons) {
    if (aei.getReason() == REASON_CRASH_NATIVE) {
        // Get the tombstone input stream.
        InputStream trace = aei.getTraceInputStream();
        // The tombstone parser built with protoc uses the tombstone schema, then parses the trace.
        Tombstone tombstone = Tombstone.parseFrom(trace);
    }
}

Depurar problemas de memória nativa

Limpador de endereços (HWASan/ASan)

O Limpador de endereços HW (HWASan, na sigla em inglês) e o Limpador de endereços (ASan, na sigla em inglês) são semelhantes ao Valgrind, mas significativamente mais rápidos e com compatibilidade muito melhor com o Android.

Essa é sua melhor opção para depurar erros de memória no Android.

Depuração Malloc

Consulte Depuração Malloc e Rastreamento de memória nativa usando callbacks de libc (links em inglês) para ver uma descrição completa das opções integradas da biblioteca C para depurar problemas de memória nativa.

Hooks Malloc

Se você quiser criar as próprias ferramentas, a libc do Android também é compatível com 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 (em inglês) para ver instruções de uso.

Estatísticas Malloc

O Android tem suporte às extensões mallinfo(3) e malloc_info(3) para <malloc.h> (links em inglês).

A funcionalidade malloc_info está disponível no Android 6.0 (Marshmallow) e versões mais recentes. O esquema XML dela está documentado no cabeçalho malloc.h da Bionic.

Caracterização de perfil

Para caracterizar o perfil de CPU do código nativo, use o Simpleperf.