zoukankan      html  css  js  c++  java
  • Android NDK开发调试

    ndk-stack:

    https://developer.android.com/ndk/guides/ndk-stack?hl=zh-cn

    JNI开发:

    https://developer.android.google.cn/training/articles/perf-jni?hl=zh-cn

    Android NDK开发Crash错误定位

    http://android.jobbole.com/80685/


     ndk-stack

    ndk-stack 工具让您可以在堆叠追踪出现在 adb logcat 的输出中时过滤它们。 它还可以从源代码将共享库中的任意地址替换为对应的 <source-file>:<line-number> 值,从而更容易找出问题所在。

    例如,它可将下面的内容:

     
    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  %gt;%gt;%gt; /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):

    转换为更容易阅读的输出:

     
    ********** Crash dump: **********
    Build fingerprint: 'generic/google_sdk/generic/:2.2/FRF91/43546:eng/test-keys'
    pid: 351, tid: 351  >>> /data/local/ndk-tests/crasher <<<
    signal 11 (SIGSEGV), fault addr 0d9f00d8
    Stack frame #00  pc 0000841e  /data/local/ndk-tests/crasher : Routine zoo in /tmp/foo/crasher/jni/zoo.c:13
    Stack frame #01  pc 000083fe  /data/local/ndk-tests/crasher : Routine bar in /tmp/foo/crasher/jni/bar.c:5
    Stack frame #02  pc 000083f6  /data/local/ndk-tests/crasher : Routine my_comparison in /tmp/foo/crasher/jni/foo.c:9
    Stack frame #03  pc 000191ac  /system/lib/libc.so
    Stack frame #04  pc 000083ea  /data/local/ndk-tests/crasher : Routine foo in /tmp/foo/crasher/jni/foo.c:14
    Stack frame #05  pc 00008458  /data/local/ndk-tests/crasher : Routine main in /tmp/foo/crasher/jni/main.c:19
    Stack frame #06  pc 0000d362  /system/lib/libc.so

    若要使用 ndk-stack,首先,您需要一个包含应用共享库的符号版本的目录。 如果您使用 NDK 构建系统 (ndk-build),则这些共享库文件位于 $PROJECT_PATH/obj/local/<abi> 下,其中 <abi> 表示您的设备的 ABI。 默认情况下,系统使用 armeabi ABI。

    可通过两种方式使用此工具。您可以将 logcat 文本作为直接输入馈送到程序。例如:

     
    adb logcat | $NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi
    

    您也可以使用 -dump 选项将 logcat 指定为输入文件。例如:

     
    adb logcat > /tmp/foo.txt
    $NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi -dump foo.txt
    

    该工具在开始解析 logcat 输出时将查找第一行星号。例如:

     
    *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***

    https://www.wikitechy.com/tutorials/android/android-forum/enable-experimental-ndk-plugin-support-for-gradle-and-androidstudio-in-android

    https://blog.csdn.net/a396901990/article/details/51922182 https://jcenter.bintray.com/com/android/tools/build/gradle-experimental/ classpath 'com.android.tools.build:gradle-experimental:0.11.0-alpha-preview-02' https://mvnrepository.com/artifact/com.android.tools.build/gradle-experimental?repo=google https://maven.google.com/ https://sites.google.com/a/android.com/tools/tech-docs/new-build-system/gradle-experimental classpath 'com.android.tools.build:gradle-experimental:0.11.0-alpha-preview-02' google() jcenter() // maven { // url "https://maven.google.com/"

  • 相关阅读:
    .NET 3.5新特性(转)
    (转)常用正则表达式
    IEC 61850(转)
    好几年了,我又回来了。
    EPR和SAP的一些名词解释(转载)
    为blogs添加风采,添加奥运金牌榜及赛程
    VS2010崩溃重启解决方法.
    C#制作Windows service服务系列二:演示一个定期执行的windows服务及调试(windows service)(转载)
    C#中操作XML (修改完整版) (转)
    C#制作Windows service服务系列一:制作一个可安装、可启动、可停止、可卸载的Windows service
  • 原文地址:https://www.cnblogs.com/bluestorm/p/10272995.html
Copyright © 2011-2022 走看看