android jni 奔溃问题解决

一、调试工具

1.1 adb

  1. 命令为 adb.exe
  2. 作用为 打印手机的详细运行日志
  3. 存放目录为 $SDK_DIR/platform-tool
  4. 监控命令为 adb.exe logcat

1.2 addr2line

  1. 命令为 *addr2line.exe
  2. 作用为 将adb打印出的奔溃日志的地址转换为崩溃函数的具体行数
  3. 存放目录为

arm64-v8a 在 $(SDK_DIR)\ndk-bundle\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin
armeabi-v7a 在 $(SDK_DIR)\ndk-bundle\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin

  1. 不同架构的so应该使用对应架构的命令,否则会出现不支持的问题
  2. 使用方法
    使用android studio奔溃时,会答应出一个id,同时adb.exe locat的页面通过这个id进行查找,可以查找到一系列奔溃的堆栈信息,每条信息有函数名字和一个内存地址等信息,然后复制地址,按照测试命令进行测试,例如复制 00000000000685c4,然后进行测试,不出意外的话,可以查找到程序的崩溃位置。
    5 测试命令

$BIN_DIR\aarch64-linux-android-addr2line.exe -e $APP_DIR\library\build\intermediates\ndkBuild\debug\obj\local\arm64-v8a\lib*.so -s -f -C 00000000000685c4

1.3 c/c++代码打印

#ifdef ANDROID
#define _DEBUG
#include <jni.h>
#include <android/log.h>
#define LOG_TAG "$FILE_NAME.c"
#define printf(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
#endif
使用时直接printf("helloworld!\n");

二、奔溃问题介绍

2.1 非正常奔溃,类似指针越界

  1. 在安卓端使用临时变量开辟的空间不能过大,工程中使用1024*1024的空间,会在调用后莫名其妙的奔溃,改成malloc或new后正常。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值