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.