天天看點

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
    

           

繼續閱讀