使用android studio进行ndk开发时如何定位crash错误
来源:互联网 发布:要启用windows aero 编辑:程序博客网 时间:2024/06/03 22:59
使用android studio进行ndk开发时如何定位crash崩溃错误
在ndk开发时, jni层的代码一旦出现问题, 就会打印如下信息, 然后直接闪退, 这时候让人非常抓狂, 只能过在各个jni函数中打印日志来跟踪问题,但是效率实在是太低,碰到有多线程的时候很难定位到问题.
网上搜索到的定位ndk崩溃的文章都是使用eclipse来举例的, 编译时产生的so文件保存在obj/local/armeabi/目录下, 但是使用android studio进行开发的话根本没有obj/local/armeabi/这个目录.
因此本篇文章就来介绍下如何在android studio下来定位ndk崩溃
- 首先我们要先把Logcat里的show only selected application选项改成No Filters(红框1), 这时就能看到系统打印出的DEBUG信息.
- 在DEBUG信息里找到backtrace(红框2), 这段就是系统给出的造成崩溃的信息, 但仅仅给出了是哪个函数, 而没有准确给出是那一行代码造成的崩溃.
- 记下#00 pc 00013122(红框3)这个信息, 这个信息就是用来定位崩溃代码的地址
想要准确定位崩溃代码的地址的话我们就需要用到ndk工具包里的adrr2line这个工具了
- 首先先找到这个工具, linux系统这个工具在如下位置
/home/gavinandre/Documents/Android/android-sdk-linux/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-addr2line
在该目录下做个软链接后就能在任何目录使用这个命令了
sudo ln -s arm-linux-androideabi-addr2line /usr/local/bin/addr2line
- 找到造成崩溃的so文件地址, 在app目录下搜索so文件
$ find -name "libsocket_camera-lib.so"./build/intermediates/bundles/debug/jni/armeabi-v7a/libsocket_camera-lib.so./build/intermediates/bundles/default/jni/armeabi-v7a/libsocket_camera-lib.so./build/intermediates/cmake/release/obj/armeabi-v7a/libsocket_camera-lib.so./build/intermediates/cmake/debug/obj/armeabi-v7a/libsocket_camera-lib.so./build/intermediates/transforms/mergeJniLibs/release/folders/2000/3/main/lib/armeabi-v7a/libsocket_camera-lib.so./build/intermediates/transforms/mergeJniLibs/debug/folders/2000/3/main/lib/armeabi-v7a/libsocket_camera-lib.so./build/intermediates/transforms/stripDebugSymbol/release/folders/2000/3/main/lib/armeabi-v7a/libsocket_camera-lib.so./build/intermediates/transforms/stripDebugSymbol/debug/folders/2000/3/main/lib/armeabi-v7a/libsocket_camera-lib.so
可以看到android studio编译后生成了许多so文件, 以我的经验正确的so文件一般是这个文件:build/intermediates/transforms/mergeJniLibs/release/folders/2000/3/main/lib/armeabi-v7a/libsocket_camera-lib.so
然后就可以使用addrline命令了, 格式是addr2line -e 文件位置 崩溃地址(红框3: 00013122)
addr2line -e build/intermediates/transforms/mergeJniLibs/release/folders/2000/3/main/lib/armeabi-v7a/libsocket_camera-lib.so 00013122
如果so文件正确的话会打印如下信息,socket_camera.cpp就是崩溃的cpp文件, 304就是行数, 然后检查下定位出来的位置是否在DEBUG信息里给出的函数里(红框4)
/home/gavinandre/Documents/Workspace/AndroidStudioProject/DisinfectionRobot/nvadtslibrary/src/main/cpp/nvadts/video_engine.cpp:304
如果so文件错误的话会打印问号或者一个不对的位置, 这时就要换so文件多尝试了
??:?
- 使用android studio进行ndk开发时如何定位crash错误
- Android NDK开发Crash错误定位
- Android NDK开发Crash错误定位
- Android NDK开发Crash错误定位
- Android NDK开发Crash错误定位
- Android NDK开发Crash错误定位
- Android NDK开发Crash错误定位
- Android NDK开发Crash错误定位
- Android NDK开发Crash错误定位
- Android NDK开发Crash错误定位
- Android NDK开发Crash错误定位
- Android NDK开发Crash错误定位
- Android NDK开发Crash错误定位
- Android NDK开发Crash错误定位
- Android NDK开发Crash错误定位
- Android NDK开发Crash错误定位
- Android NDK开发Crash错误定位
- Android NDK开发Crash错误定位
- linux 启动流程图
- navicat cannot create file解决方法
- 语义分割--LinkNet: Exploiting Encoder Representations for Efficient Semantic Segmentation
- shell脚本命令代换
- 笃行务实 布萌区块链选择数字资产作为区块链行业突破口
- 使用android studio进行ndk开发时如何定位crash错误
- (55)join:等待线程终止
- 互联网协议入门(二)
- 人工智能的未来
- 识别文件编码
- selinux属性
- Sping国际化信息
- Tenosrflow中基本算术运算函数
- DOTween教程