Как получить подробные отчеты о сбоях Android NDK?

Я отлаживаю огромный проект NDK в Android Studio, приложение вылетает в случайное время с сообщением, похожим на

A/libc: Fatal Signal 11 (SIGSEGV), code 1, fault addr 0x30 in fid 22993 (Thread-99505)    

Цифры иногда разные, но ошибка похожая, а иногда вкладка «Выполнить» в Android Studio вообще не показывает никакой ошибки, а программа просто вылетает с сообщением Application terminated

Оглядевшись, я обнаружил, что Android должен генерировать какой-то журнал сбоев, похожий на показанный здесь.

https://source.android.com/devices/tech/debug/native-crash

Но я не понимаю, как их получить, или есть ли какая-то настройка в Android Studio, которая позволяет мне их просматривать

Как получить такие отчеты о сбоях из Android Studio?

Android Studio версии 3.0.1 в Apple MacBook

3
0
1 861
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вместо вкладки «Выполнить» посмотрите на файл Logcat. Не устанавливайте фильтр только для своего приложения. Есть большая вероятность, что вы увидите трассировку стека, например

I/DEBUG   (   31): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG   (   31): Build fingerprint: 'generic/google_sdk/generic/:2.2/FRF91/43546:eng/test-keys'
I/DEBUG   (   31): pid: 351, tid: 351  >>> /data/local/ndk-tests/crasher <<<
I/DEBUG   (   31): signal 11 (SIGSEGV), fault addr 0d9f00d8
I/DEBUG   (   31):  r0 0000af88  r1 0000a008  r2 baadf00d  r3 0d9f00d8
I/DEBUG   (   31):  r4 00000004  r5 0000a008  r6 0000af88  r7 00013c44
I/DEBUG   (   31):  r8 00000000  r9 00000000  10 00000000  fp 00000000
I/DEBUG   (   31):  ip 0000959c  sp be956cc8  lr 00008403  pc 0000841e  cpsr 60000030
I/DEBUG   (   31):          #00  pc 0000841e  /data/local/ndk-tests/crasher
I/DEBUG   (   31):          #01  pc 000083fe  /data/local/ndk-tests/crasher
I/DEBUG   (   31):          #02  pc 000083f6  /data/local/ndk-tests/crasher
I/DEBUG   (   31):          #03  pc 000191ac  /system/lib/libc.so
I/DEBUG   (   31):          #04  pc 000083ea  /data/local/ndk-tests/crasher
I/DEBUG   (   31):          #05  pc 00008458  /data/local/ndk-tests/crasher
I/DEBUG   (   31):          #06  pc 0000d362  /system/lib/libc.so
I/DEBUG   (   31):

Android NDK включает команду ndk-stack, которая может помочь сопоставить адреса с фактическими исходными файлами вашего кода, которая основана на утилите адрес2линия в цепочке инструментов NDK.

Дальнейшие инструкции для понимания трассировки стека: https://developer.android.com/studio/debug/stacktraces

Из комментариев:
Вы можете найти «неразобранные» библиотеки в app/build/intermediates/transforms/mergeJniLibs.

Привет, мне удалось просмотреть сообщения журнала, подобные тем, которые вы разместили здесь, после того, как я удалил все фильтры, и они появляются после сообщения о сбое приложения, как и ожидалось. Сейчас я пытаюсь использовать инструмент ndk-stack, и страница, на которую вы ссылаетесь, говорит о $PROJECT_PATH/obj... Что такое $PROJECT_PATH? Я предположил, что именно здесь я создал свой проект для Android (папка, содержащая папку приложения, build.gradle, имя_проекта.iml и т. д.), но папки «obj» там нет. Нужно ли мне что-то делать, чтобы сделать эту папку obj самостоятельно, или это должна сделать студия Android?

user13267 26.04.2019 07:48

@ user13267 Это может зависеть от структуры вашего проекта, но в моих проектах папка obj обычно находится в app/src/main.

Michael 26.04.2019 08:33

его нет в папке моего проекта. Нужно ли мне включить некоторые настройки в студии Android, чтобы создать эту папку?

user13267 26.04.2019 09:22

Вы можете найти «неразобранные» библиотеки в разделе app/build/intermediates/transforms/mergeJniLibs

Alex Cohn 26.04.2019 10:32

Другие вопросы по теме