天天看点

Android Native crash tomestone trace批量转换方法

      最近在跟进一个native crash的问题,偶然发现Android 5.0及其以上的版本源代码下有批量转换 Native trace 工具 development/scripts/stack,特此记录一下.

      帮助信息如下:

usage: ./development/scripts/stack [options] [FILE]

  --arch=arm|arm64|mips|mips64|x86|x86_64
       the target architecture

  FILE should contain a stack trace in it somewhere
       the tool will find that and re-print it with
       source files and line numbers.  If you don't
       pass FILE, or if file is -, it reads from
       stdin.

           

     其中的FILE文件主要是当发生native crash 产生的tomestone墓碑文件,下面就来演示一下具体的使用方法,其中会将所有的tomestone批量trace出来,方便开发者跟踪错误的natve代码,而不需要使用传统的addrline2或者ndk-stack一个个的进行查找

[SPRD] [email protected]:~/ssd/xxx/ap/idh.code$ ./development/scripts/stack  tombstone_08 
Searching for native crashes in tombstone_08
Reading symbols from /home/tangkw/ssd/A50/ap/idh.code/out/target/product/sl8541e_1h10_go/symbols
Revision: '0'
pid: 4630, tid: 4640, name: HeapTaskDaemon  >>> com.xxx.daemon <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x3b6e83
    r0 003b6e6f  r1 00000000  r2 a718e800  r3 00000000
    r4 a8472a00  r5 b23b5d80  r6 b23b5d84  r7 a847f400
    r8 97df752c  r9 97df7520  sl 00000059  fp b2395d20
    ip 97df7520  sp 97df7508  lr b210e877  pc b210e88c  cpsr 20000030
Using arm toolchain from: /home/tangkw/ssd/A50/ap/idh.code/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/
           

     下面是截取转换后的一段trace数据,可以非常清晰的看见调用流程,这样远比使用addrline2或者ndk-stack来得方便

Searching for native crashes in tombstone_03
Reading symbols from /home/xxx/ssd/xxx/ap/idh.code/out/target/product/sl8541e_1h10_go/symbols
Revision: '0'
pid: 15749, tid: 16250, name: RenderThread  >>> com.xxx.daemon <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x8
    r0 95876d00  r1 00000008  r2 00000001  r3 00000000
    r4 a73a2710  r5 00000002  r6 00000000  r7 95876d00
    r8 9627f170  r9 95183528  sl b17cda48  fp 00000000
    ip 95876d04  sp 963f1608  lr a1ae9698  pc 00000008  cpsr 60000010
Using arm toolchain from: /home/tangkw/ssd/A50/ap/idh.code/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/

Stack Trace:
  RELADDR   FUNCTION                                                              FILE:LINE
  00000008                                                                        <unknown>
  00638694  egl_winsys_get_implementation+7500                                    /vendor/lib/egl/libGLES_mali.so
  00637684  egl_winsys_get_implementation+3388                                    /vendor/lib/egl/libGLES_mali.so
  00311a30  eglGetCurrentDisplay+436                                              /vendor/lib/egl/libGLES_mali.so
  003118e4  eglGetCurrentDisplay+104                                              /vendor/lib/egl/libGLES_mali.so
  0030e984  eglQuerySurface+1324                                                  /vendor/lib/egl/libGLES_mali.so
  0000bd99  eglQuerySurface+104                                                   frameworks/native/opengl/libs/EGL/eglApi.cpp:857
  v------>  android::uirenderer::renderthread::EglManager::queryBufferAge(void*)  frameworks/base/libs/hwui/renderthread/EglManager.cpp:417
  0004dc2b  android::uirenderer::renderthread::EglManager::beginFrame(void*)+82   frameworks/base/libs/hwui/renderthread/EglManager.cpp:431
  0004b5cd  android::uirenderer::renderthread::OpenGLPipeline::getFrame()+8       frameworks/base/libs/hwui/renderthread/OpenGLPipeline.cpp:55
  00049feb  android::uirenderer::renderthread::CanvasContext::draw()+58           frameworks/base/libs/hwui/renderthread/CanvasContext.cpp:429
  0004cc85  android::uirenderer::renderthread::DrawFrameTask::run()+140           frameworks/base/libs/hwui/renderthread/DrawFrameTask.cpp:105
  00051cef  android::uirenderer::renderthread::RenderThread::threadLoop()+178     frameworks/base/libs/hwui/renderthread/RenderThread.cpp:375
  0000d2c5  android::Thread::_threadLoop(void*)+144                               system/core/libutils/Threads.cpp:744
  0006e295  android::AndroidRuntime::javaThreadShell(void*)+80                    frameworks/base/core/jni/AndroidRuntime.cpp:1239
  00046f93  __pthread_start(void*)+22                                             bionic/libc/bionic/pthread_create.cpp:226
  0001a2a7  __start_thread+32                                                     bionic/libc/bionic/clone.cpp:47
    

           

继续阅读