Отладка встроенных сбоев
Если вы изо всех сил пытаетесь понять собственный аварийный дамп или надгробие, хорошим введением будет «Отладка собственного кода платформы Android» .
Более полный каталог распространенных типов сбоев и способов их исследования см. в разделе «Диагностика собственных сбоев» .
Инструмент ndk-stack может помочь обозначить ваши сбои. Вы можете устранять сбои в Android Studio, как описано в общей документации по отладке приложения . Если вы предпочитаете использовать командную строку, ndk-gdb позволяет подключить либо gdb
, либо lldb
из вашей оболочки.
Предоставьте приложениям прямой доступ к следам надгробия
Начиная с Android 12 (уровень API 31), вы можете получить доступ к собственному захоронению сбоя вашего приложения в качестве буфера протокола с помощью метода ApplicationExitInfo.getTraceInputStream()
. Буфер протокола сериализуется с использованием этой схемы . Раньше единственным способом получить доступ к этой информации был через Android Debug Bridge (adb).
Вот пример того, как реализовать это в вашем приложении:
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);
}
}
Устранение проблем с собственной памятью
Дезинфицирующее средство адресов (HWASan/ASan)
HWAddress Sanitizer (HWASan) и Address Sanitizer (ASan) похожи на Valgrind, но значительно быстрее и гораздо лучше поддерживаются на Android.
Это лучший вариант для устранения ошибок памяти на Android.
Отладка Malloc
См. «Отладка Malloc и отслеживание собственной памяти с использованием обратных вызовов libc» для подробного описания встроенных возможностей библиотеки C для отладки проблем с собственной памятью.
Маллок крючки
Если вы хотите создать свои собственные инструменты, libc Android также поддерживает перехват всех вызовов выделения/освобождения, которые происходят во время выполнения программы. Инструкции по использованию см. в документации malloc_hooks .
Статистика Маллока
Android поддерживает расширения mallinfo(3) и malloc_info(3) для <malloc.h>
.
Функциональность malloc_info
доступна в Android 6.0 (Marshmallow) и более поздних версиях, а ее XML-схема документирована в заголовке malloc.h Bionic.
Профилирование
Для профилирования ЦП собственного кода вы можете использовать Simpleperf .