Я отлаживаю огромный проект 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
Вместо вкладки «Выполнить» посмотрите на файл 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.
@ user13267 Это может зависеть от структуры вашего проекта, но в моих проектах папка obj обычно находится в app/src/main.
его нет в папке моего проекта. Нужно ли мне включить некоторые настройки в студии Android, чтобы создать эту папку?
Вы можете найти «неразобранные» библиотеки в разделе app/build/intermediates/transforms/mergeJniLibs
Привет, мне удалось просмотреть сообщения журнала, подобные тем, которые вы разместили здесь, после того, как я удалил все фильтры, и они появляются после сообщения о сбое приложения, как и ожидалось. Сейчас я пытаюсь использовать инструмент ndk-stack, и страница, на которую вы ссылаетесь, говорит о $PROJECT_PATH/obj... Что такое $PROJECT_PATH? Я предположил, что именно здесь я создал свой проект для Android (папка, содержащая папку приложения, build.gradle, имя_проекта.iml и т. д.), но папки «obj» там нет. Нужно ли мне что-то делать, чтобы сделать эту папку obj самостоятельно, или это должна сделать студия Android?