Android native crash定位

本文提供了一套针对Android应用及系统开发中的Native Crash定位方案,包括模拟环境创建、Crash定位脚本演示及NDK工具的具体使用流程,帮助开发者快速定位并解决问题。

本文针对Android应用开发和系统开发分别提供了三款native crash定位工具。

一.应用开发

下载地址:so_crash_analyse

1.模拟环境

  • 本文使用Android Studio 4.1版本,按默认配置创建一个jni工程。
    在这里插入图片描述
  • 模拟native crash,修改natvie-lib.cpp
    在这里插入图片描述

2.crash定位脚本演示

  • 通过logcat查找tombstone
I/BootReceiver: Copying /data/tombstones/tombstone_02 to DropBox (SYSTEM_TOMBSTONE)
  • 找到包含Library Symbols的共享库。如下:
    在这里插入图片描述
  • crash定位
    比如使用的是32位库,就将armeabi-v7a文件夹拖动到脚本so_crash_analyse上,此时会提示输入tombstone编号,比如我们这个就输入02。分析结果中就能看到是哪一行代码导致的问题
    在这里插入图片描述

3.脚本说明

首次使用时,需配置依赖环境。打开so_crash_analyse

  • 指定ndk路径
  • 指定notepad++路径,用于自动打开分析结果

二.系统开发

可使用源码目录提供的development/scripts/stack进行分析,这里不具体演示,简单说明下使用步骤。

  • pull出tomebstone
  • 到development/scripts/下,使用命令:
./stack tombstone文件名

三.ndk工具定位

从logcat中找到关键堆栈信息:

    runtime.cc:655]   native: #13 pc 0000fb65  /data/data/com.jidouauto.fast.gameshop/.jiagu/libjiaguv1.so (_JNIEnv::SetObjectArrayElement(_jobjectArray*, int, _jobject*)+42)
    runtime.cc:655]   native: #14 pc 0000ed29  /data/data/com.jidouauto.fast.gameshop/.jiagu/libjiaguv1.so (???)
    runtime.cc:655]   native: #15 pc 0000e5b3  /data/data/com.jidouauto.fast.gameshop/.jiagu/libjiaguv1.so (native_attach(_JNIEnv*, _jclass*, _jobject*)+86)

使用ndk工具addr2line查看出错的函数位置

1.找到带Library Symbols的共享库的路径为E:\code\jiagu\build\intermediates\cmake\debug\obj\armeabi-v7a
2.输入命令:
E:\as\sdk\ndk-bundle\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin\arm-linux-androideabi-addr2line.exe -Cfe E:\code\Jiagu\jiagu\build\intermediates\cmake\debug\obj\armeabi-v7a\libjiagu.so 0000ed29
3.输出:
loadDex(_JNIEnv*, _jobject*, _jbyteArray*)
Jiagu/jiagu/src/main/cpp/jiagu.cpp:336
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值