分析安卓ANR tombstone使用ndk-stack addr2line
来源:互联网 发布:淘宝莆田高仿鞋店铺 编辑:程序博客网 时间:2024/05/22 17:24
转自https://my.oschina.net/u/2424583/blog/535296
刷机过程中会碰到很多crash问题,此时安卓会在/data/tombstones目录下保存9个session文件,如下
root@android:/ # find . |grep tombs./data/tombstones./data/tombstones/tombstone_00./data/tombstones/tombstone_01root@android:/ #
每个tombstone文件里包含如下信息:
Build fingerprint
Crashed process and PIDs
Terminated signal and fault address
CPU registers
Call stack
Stack content of each call
下面讲述怎么使用ndk-stack和addr2line来跟踪tombstone文件里的错误信息:
1、安装NDK,设置环境变量
export ANDROID_NDK_PATH=/home/bytesthink/tools/android-ndk-r8d/PATH= $ANDROID_NDK_PATH:$PATH
2、执行ndk-stack命令,其中--sym指向AOSP编译目录中符号路径 --dump指向要调试的tombstone文件
bytesthink@ubuntu:~/tools/android-ndk-r8d$ ./ndk-stack -sym ~/myrelease/symbols -dump ~/win/bytesthink/Documents/test/perform_releases/tombstone_01********** Crash dump: **********Build fingerprint: 'version1239210121'pid: 19135, tid: 19135, name: erviceinterface >>> com.test.powermeterserver.serviceinterface <<<signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadd00dStack frame #00 pc 00072c9a /system/lib/libdvm.so (dvmAbort+170)Stack frame #01 pc 00050f6b /system/lib/libdvm.so (ScopedCheck::checkInstanceFieldID(_jobject*, _jfieldID*)+379)Stack frame #02 pc 0005db56 /system/lib/libdvm.so (Check_SetBooleanField(_JNIEnv*, _jobject*, _jfieldID*, unsigned char)+150)Stack frame #03 pc 00003a93 /system/lib/libmytestt.so (Java_com_test_jni_MyLibWrapper_getMonitorSample+259)Stack frame #04 pc 0002d850 /system/lib/libdvm.so (dvmPlatformInvoke+80)Stack frame #05 pc 00085b48 /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+648)Stack frame #06 pc 000505db /system/lib/libdvm.so (dvmCheckCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+59)Stack frame #07 pc 0008b96d /system/lib/libdvm.so (dvmResolveNativeMethod(unsigned int const*, JValue*, Method const*, Thread*)+317)Stack frame #08 pc 00170ff1 /system/lib/libdvm.soStack frame #09 pc 000402a6 /system/lib/libdvm.so (dvmMterpStd(Thread*)+70)Stack frame #10 pc 0003dc14 /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+212)Stack frame #11 pc 000b69db /system/lib/libdvm.so (dvmInvokeMethod(Object*, Method const*, ArrayObject*, ArrayObject*, ClassObject*, bool)+2011)Stack frame #12 pc 000c9f07 /system/lib/libdvm.so (Dalvik_java_lang_reflect_Method_invokeNative(unsigned int const*, JValue*)+295)Stack frame #13 pc 00170ff1 /system/lib/libdvm.soStack frame #14 pc 000402a6 /system/lib/libdvm.so (dvmMterpStd(Thread*)+70)Stack frame #15 pc 0003dc14 /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+212)Stack frame #16 pc 000b575c /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, char*)+700)Stack frame #17 pc 00079b8e /system/lib/libdvm.so (CallStaticVoidMethodV(_JNIEnv*, _jclass*, _jmethodID*, char*)+78)Stack frame #18 pc 0005a020 /system/lib/libdvm.so (Check_CallStaticVoidMethodV(_JNIEnv*, _jclass*, _jmethodID*, char*)+432)Stack frame #19 pc 00057c5a /system/lib/libandroid_runtime.so (_JNIEnv::CallStaticVoidMethod(_jclass*, _jmethodID*, ...)+42)Stack frame #20 pc 00059351 /system/lib/libandroid_runtime.so (android::AndroidRuntime::start(char const*, char const*)+945)Stack frame #21 pc 00000fd0 /system/bin/app_process (main+528)Stack frame #22 pc 0001a579 /system/lib/libc.so (__libc_init+89)Stack frame #00 pc 0001ca31 /system/lib/libc.soStack frame #01 pc 000e66e8 /system/lib/libdvm.so (gcDaemonThread(void*)+216)Stack frame #02 pc 00097ee0 /system/lib/libdvm.so (internalThreadStart(void*)+528)Stack frame #03 pc 0000deb8 /system/lib/libc.so (__thread_entry+248)Stack frame #04 pc 0001c951 /system/lib/libc.soStack frame #05 pc 000021e0 /dev/ashmem/dalvik-LinearAlloc (deleted)Stack frame #06 pc 0000af42 /data/dalvik-cache/system@app@PowerManagementService.apk@classes.dexStack frame #00 pc 0001c05b /system/lib/libc.soStack frame #01 pc 0009163c /system/lib/libdvm.so (signalCatcherThreadStart(void*)+92)Stack frame #02 pc 00097ee0 /system/lib/libdvm.so (internalThreadStart(void*)+528)Stack frame #03 pc 0000deb8 /system/lib/libc.so (__thread_entry+248)Stack frame #04 pc 0001c951 /system/lib/libc.soStack frame #05 pc 00002ff4 /system/lib/libdvm.soStack frame #00 pc 0001c317 /system/lib/libc.soStack frame #01 pc 000c012b /system/lib/libdvm.so (jdwpThreadStart(void*)+123)
通过上图发现libmytestt.so在PC地址 00003a93处崩溃;
3、使用addr2line调试
NDK和Linux上都带有这个工具,路径如下:
i686-linux-android-addr2lineNDK路径:android-ndk-r8d/toolchains/x86-4.6/prebuilt/linux-x86/bin/
可以转换个别名在全局环境中使用alias addr2line='~/tools/android-ndk-r8d/toolchains/x86-4.6/prebuilt/linux-x86/bin/i686-linux-android-addr2line'使用命令bytesthink@ubuntu:~/tools/android-ndk-r8d$ addr2line -f -e ~/myrelease/symbols/system/lib/libmytestt.so 00003a93Java_com_test_jni_MyLibWrapper_getMonitorSample.../device/test/PRIVATE/log_infra/myservice/jni/com_test_jni_MyLibWrapper.c:189
阅读全文
0 0
- 分析安卓ANR tombstone使用ndk-stack addr2line
- 笔记:ndk-stack和addr2line
- Android NDK tombstone分析工具
- Android NDK tombstone分析工具
- Android NDK Tombstone/Crash 分析
- Debugging tombstones with ndk-stack and addr2line
- Debugging tombstones with ndk-stack and addr2line
- 使用arm-eabi-addr2line, ndk-stack工具跟踪Android调用堆栈
- 使用arm-eabi-addr2line, ndk-stack工具跟踪Android调用堆栈
- 使用arm-eabi-addr2line, ndk-stack工具跟踪Android调用堆栈
- ndk addr2line工具的使用
- ndk-stack使用(分析native-code )
- ndk-stack 使用(分析native代码stack)
- ndk工具使用之arm-eabi-addr2line
- 使用addr2line分析代码错误
- 安卓之ANR
- 安卓使用JNI-NDK
- tombstone 分析
- 《大唐姻缘传》(李治篇) 第二章 青春难再会 前事又重温
- java要深入学习的文章
- HTML+CSS编写静态网站-07 网页内容结构的搭建
- 深度了解Android 7.0 ,你准备好了吗?
- 机器学习算法应用场景实例六十则
- 分析安卓ANR tombstone使用ndk-stack addr2line
- 聚类算法应用场景实例十则
- Android debuggerd 源码分析
- 关联规则应用场景实例十则
- [POJ2826]An Easy Problem?!(计算几何)
- jdk1.7和jdk1.8区别
- Combination Sum II问题及解法
- Linux 软件看门狗 watchdog 喂狗
- 2017.6.15 数字表格 思考记录