Отладка вашего проекта

Отладка встроенных сбоев

Если вы изо всех сил пытаетесь понять собственный аварийный дамп или надгробие, хорошим введением будет «Отладка собственного кода платформы 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 .