【问题标题】:How do I get android NDK detail crash reports?如何获取 android NDK 详细崩溃报告?
【发布时间】:2019-09-15 11:15:54
【问题描述】:

我正在 Android Studio 中调试一个巨大的 NDK 项目,应用程序在几乎随机的时间崩溃,并显示类似于

的消息
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 获取此类崩溃报告?

Apple macbook 中的 Android Studio 版本 3.0.1

【问题讨论】:

    标签: android debugging android-ndk adb android-studio-3.0


    【解决方案1】:

    查看 Logcat,而不是 Run 选项卡。不要仅将过滤器设置为您的应用程序。您很有可能会看到堆栈跟踪,例如

    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,它可以帮助将地址与代码的实际源文件匹配,该命令基于 NDK 工具链中的 addr2line 实用程序。

    了解堆栈跟踪的进一步说明:https://developer.android.com/studio/debug/stacktraces

    来自 cmets:
    您可能会在 app/build/intermediates/transforms/mergeJniLibs 下找到“未剥离”的库

    【讨论】:

    • 您好,在删除所有过滤器后,我设法查看了与您在此处发布的日志消息类似的日志消息,并且它们按预期出现在应用程序崩溃消息之后。我现在正在尝试使用 ndk-stack 工具,并且您链接到的页面讨论了 $PROJECT_PATH/obj...。什么是 $PROJECT_PATH?我以为这是我制作我的 android 项目的地方(包含 app 文件夹、build.gradle、project_name.iml 等的文件夹),但“obj”文件夹不存在。我需要做些什么来自己制作这个 obj 文件夹还是应该由 android studio 制作?
    • @user13267 这可能取决于您的项目结构,但在我的项目中,obj 文件夹通常位于 app/src/main。
    • 它不在我的项目文件夹中。我是否需要在 android studio 中启用某些设置才能创建此文件夹?
    • 你可以在app/build/intermediates/transforms/mergeJniLibs下找到'unstripped'库
    猜你喜欢
    • 1970-01-01
    • 2021-02-17
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多