zoukankan      html  css  js  c++  java
  • Android NDK debug 方法

    最近又频繁遇到 NDK 的错误,记录一下调试的一些经验,以备后续查看

    一般来说,在 Android Studio中的Monitor中将过滤器的 LOG TAG 设置为 “DEBUG” 就可以将所有的 JNI 的错误显示出来了。如果看不明白报错信息,就要用到下面的工具。

    ndk-stack

    >Usage:
       ndk-stack -sym <path> [-dump <path>]
          -sym  Contains full path to the root directory for symbols.   
          -dump Contains full path to the file containing the crash dump.  
                This is an optional parameter. If ommited, ndk-stack will read input data from stdin     
       See docs/NDK-STACK.html in your NDK installation tree for more details.
    

    使用方法,adb logcat | ./ndk-stack -sym "xxxx",用 -sym 指定编译生成的 .so 文件的位置,最新版本的 Android studio 的 .so 文件的位置是
    project/build/intermediates/cmake/debug/obj/armeabi/xxxxxx.so
    其中 armeabi 视条件改变

    官方教程说指定目录是 $PROJECT_PATH/obj/local/armeabi 我现在使用最新的 android studio 配合 cmake 开发,已经没有这样的目录了。

    可以用 -dump 来分析 tombstone 文件,其位置在 /data/tombstones/ 注意该目录需要 root 权限。

    另外,下面链接文中提到的 addr2line 在最新的 ndk 中已经找不到了,估计是被弃用。目前的 ndk 开发文档中只有对 ndk-gdb 和 ndk-stack 的介绍。

    NDK Debug 心得

    近日又为一个 Native 代码的问题耗费不少时间,经过排查发现确实是我访问了错误的内存。所以以后再遇到 Native 代码导致的 crash 问题时,特别是报错信息让人没有头绪的时候,回头去认真排查自己有没有访问没有开辟的内存地址,我的经验是,访问没有开辟的地址可能还不会崩溃,往往是在释放内存的时候崩溃的。另外就是查看释放的内存有没有问题。

    JNI 代码,可能无法做到很好的编译的检查,我们组内遇到过的问题是,Native 函数声明了 int 类型返回值却没有写返回值,程序编译安装正常,在手机上面跑到那个函数了才会挂掉。

    参考链接
    Android NDK Tombstone/Crash 分析

  • 相关阅读:
    深度学习(十一) 残差网络
    深度学习(十) GoogleNet
    深度学习(九) 深度学习最全优化方法总结比较(SGD,Momentum,Nesterov Momentum,Adagrad,Adadelta,RMSprop,Adam)
    联合概率
    深度学习(八) Batch Normalization
    概率论
    设计者模式(八) 装饰者模式
    使用Adobe Photoshop CC 2015批量修改图片尺寸
    Turn.js 实现翻书效果的学习与总结
    TweenMax动画库学习(六)
  • 原文地址:https://www.cnblogs.com/psklf/p/6179436.html
Copyright © 2011-2022 走看看