黑屏或特殊情形下查看对应进程的栈和调用情况

来源:互联网 发布:淘宝商品删除 重新上架 编辑:程序博客网 时间:2024/06/06 02:26

在黑屏问题分析时,可以分2个类别:

1、adb可用

2、adb不可用

在adb不可用时,我们需要短接reset pin让设备进入download mode,而后抓取完整的ram dump来进行后续分析。

在adb可用时,我们则可以先抓取adb日志,而后根据日志分析结果来查问题或看值得怀疑的进程堆栈。

adb下查堆栈有两个方法:cat /proc/process-ID/stack,debuggerd -b process-ID


下面列下利用debuggerd情况,他会列出该进程下所有线程的堆栈,我们可以查黑屏时例如resume、suspend或者backlight这些进程的主线程是否处于hang状态。


root@msm8226:/ # debuggerd -b 3513
debuggerd -b 3513
Sending request to dump task 3513.




----- pid 3513 at 2014-01-12 02:46:36 -----
Cmd line: android.process.media


"d.process.media" sysTid=3513
  #00  pc 00021888  /system/lib/libc.so (epoll_wait+12)
  #01  pc 0001063f  /system/lib/libutils.so (android::Looper::pollInner(int)+98)
  #02  pc 00010869  /system/lib/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+92)
  #03  pc 0006a6f9  /system/lib/libandroid_runtime.so (android::NativeMessageQueue::pollOnce(_JNIEnv*, int)+22)
  #04  pc 0002034c  /system/lib/libdvm.so (dvmPlatformInvoke+112)
  #05  pc 00050fcf  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398)
  #06  pc 0003b67d  /system/lib/libdvm.so (dvmCheckCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+8)
  #07  pc 000297e0  /system/lib/libdvm.so
  #08  pc 00030c6c  /system/lib/libdvm.so (dvmMterpStd(Thread*)+76)
  #09  pc 0002e304  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
  #10  pc 00063719  /system/lib/libdvm.so (dvmInvokeMethod(Object*, Method const*, ArrayObject*, ArrayObject*, ClassObject*, bool)+392)
  #11  pc 0006b61f  /system/lib/libdvm.so
  #12  pc 000297e0  /system/lib/libdvm.so
  #13  pc 00030c6c  /system/lib/libdvm.so (dvmMterpStd(Thread*)+76)
  #14  pc 0002e304  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
  #15  pc 00063435  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+336)
  #16  pc 0004cbb7  /system/lib/libdvm.so
  #17  pc 0003fc45  /system/lib/libdvm.so
  #18  pc 0004d3bf  /system/lib/libandroid_runtime.so
  #19  pc 0004e0e3  /system/lib/libandroid_runtime.so (android::AndroidRuntime::start(char const*, char const*)+354)
  #20  pc 0000105b  /system/bin/app_process
  #21  pc 0000e49b  /system/lib/libc.so (__libc_init+50)
  #22  pc 00000d7c  /system/bin/app_process
  
...................中间省略多个堆栈详情


"Binder_6" sysTid=12985
  #00  pc 000206d4  /system/lib/libc.so (__ioctl+8)
  #01  pc 0002cf3b  /system/lib/libc.so (ioctl+14)
  #02  pc 0001d3ed  /system/lib/libbinder.so (android::IPCThreadState::talkWithDriver(bool)+140)
  #03  pc 0001daf7  /system/lib/libbinder.so (android::IPCThreadState::getAndExecuteCommand()+6)
  #04  pc 0001db8d  /system/lib/libbinder.so (android::IPCThreadState::joinThreadPool(bool)+48)
  #05  pc 000219a5  /system/lib/libbinder.so
  #06  pc 0000ea5d  /system/lib/libutils.so (android::Thread::_threadLoop(void*)+216)
  #07  pc 0004d359  /system/lib/libandroid_runtime.so (android::AndroidRuntime::javaThreadShell(void*)+68)
  #08  pc 0000e58f  /system/lib/libutils.so
  #09  pc 0000d220  /system/lib/libc.so (__thread_entry+72)
  #10  pc 0000d3b8  /system/lib/libc.so (pthread_create+240)


----- end 3513 -----

0 0
原创粉丝点击