一、调试工具
1.1 adb
- 命令为 adb.exe
- 作用为 打印手机的详细运行日志
- 存放目录为 $SDK_DIR/platform-tool
- 监控命令为 adb.exe logcat
1.2 addr2line
- 命令为 *addr2line.exe
- 作用为 将adb打印出的奔溃日志的地址转换为崩溃函数的具体行数
- 存放目录为
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
- 不同架构的so应该使用对应架构的命令,否则会出现不支持的问题
- 使用方法
使用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 非正常奔溃,类似指针越界
- 在安卓端使用临时变量开辟的空间不能过大,工程中使用1024*1024的空间,会在调用后莫名其妙的奔溃,改成malloc或new后正常。