Android——DEBUG 堆栈

最是人间留不住,朱颜辞镜花辞树。这篇文章主要讲述Android——DEBUG 堆栈相关的知识,希望能为你提供帮助。
          当android系统执行出现死机等致命错误的时候。通常会有堆栈的DEBUG信息打印,一般直接看根本看不出问题是出在哪里!记录下我android4.2 的DEBUG 堆栈log的方法.

                                                                                                                                     

                                                                                                                                          撰写不易,转载请注明出处:http://blog.csdn.net/jscese/article/details/38232667

【Android——DEBUG 堆栈】

一.DEBUG log这是我出现错误的堆栈信息:


01-01 08:00:03.376 I/DEBUG(929):r0 0000000er1 00000000r2 00000002r3 00000000 01-01 08:00:03.376 I/DEBUG(929):r4 404cd890r5 00000002r6 00000000r7 0000000e 01-01 08:00:03.376 I/DEBUG(929):r8 404ccddcr9 404cd414sl 404cd414fp 404cd894 01-01 08:00:03.376 I/DEBUG(929):ip 00000073sp 404ccd20lr 4012aec1pc 40124570cpsr 20000010 01-01 08:00:03.376 I/DEBUG(929):d07664206e69207961d1656c646e61682020 01-01 08:00:03.376 I/DEBUG(929):d26f69746974726150d3332064656464416e 01-01 08:00:03.376 I/DEBUG(929):d430636d6d2f30636dd56c622f313030303a 01-01 08:00:03.376 I/DEBUG(929):d662636d6d2f6b636fd762636d6d2f306b6c 01-01 08:00:03.376 I/DEBUG(929):d80000000000000000d90000000000000000 01-01 08:00:03.376 I/DEBUG(929):d10 0000000000000000d11 0000000000000000 01-01 08:00:03.376 I/DEBUG(929):d12 0000000000000000d13 0000000000000000 01-01 08:00:03.376 I/DEBUG(929):d14 0000000000000000d15 0000000000000000 01-01 08:00:03.376 I/DEBUG(929):d16 000000000c7f0000d17 000000000c800000 01-01 08:00:03.376 I/DEBUG(929):d18 4163fc8780000000d19 0000000000000000 01-01 08:00:03.376 I/DEBUG(929):d20 0000000000000000d21 0000000000000000 01-01 08:00:03.376 I/DEBUG(929):d22 0000000000000000d23 0000000000000000 01-01 08:00:03.376 I/DEBUG(929):d24 0000000000000000d25 0000000000000000 01-01 08:00:03.376 I/DEBUG(929):d26 0000000000000000d27 0000000000000000 01-01 08:00:03.376 I/DEBUG(929):d28 0000000000000000d29 0000000000000000 01-01 08:00:03.376 I/DEBUG(929):d30 0000000000000000d31 0000000000000000 01-01 08:00:03.376 I/DEBUG(929):scr 00000010 01-01 08:00:03.380 I/DEBUG(929): 01-01 08:00:03.380 I/DEBUG(929): backtrace: 01-01 08:00:03.380 I/DEBUG(929):#00pc 00019570/system/lib/libc.so (strlen+16) 01-01 08:00:03.380 I/DEBUG(929):#01pc 0001febd/system/lib/libc.so (__vfprintf+2124) 01-01 08:00:03.380 I/DEBUG(929):#02pc 00021303/system/lib/libc.so (vsnprintf+70) 01-01 08:00:03.380 I/DEBUG(929):#03pc 0000139d/system/lib/liblog.so (__android_log_buf_print+44) 01-01 08:00:03.380 I/DEBUG(929):#04pc 0000cfd7/system/bin/vold 01-01 08:00:03.380 I/DEBUG(929): 01-01 08:00:03.380 I/DEBUG(929): stack: 01-01 08:00:03.380 I/DEBUG(929):404ccce0404cd474 01-01 08:00:03.380 I/DEBUG(929):404ccce440128f73/system/lib/libc.so 01-01 08:00:03.380 I/DEBUG(929):404ccce8404cd414 01-01 08:00:03.380 I/DEBUG(929):404cccec404ccd98 01-01 08:00:03.380 I/DEBUG(929):404cccf000000000 01-01 08:00:03.380 I/DEBUG(929):404cccf4404ccd98 01-01 08:00:03.380 I/DEBUG(929):404cccf800000001 01-01 08:00:03.384 I/DEBUG(929):404cccfc4001d821/system/bin/vold 01-01 08:00:03.384 I/DEBUG(929):404ccd000000002d 01-01 08:00:03.384 I/DEBUG(929):404ccd04404ccddc 01-01 08:00:03.384 I/DEBUG(929):404ccd08404cd414 01-01 08:00:03.384 I/DEBUG(929):404ccd0cffffffff 01-01 08:00:03.388 I/DEBUG(929):404ccd1000000001 01-01 08:00:03.388 I/DEBUG(929):404ccd144012a667/system/lib/libc.so 01-01 08:00:03.388 I/DEBUG(929):404ccd18df0027ad 01-01 08:00:03.388 I/DEBUG(929):404ccd1c00000000 01-01 08:00:03.388 I/DEBUG(929):#00404ccd2000000000 01-01 08:00:03.388 I/DEBUG(929):................ 01-01 08:00:03.388 I/DEBUG(929):#01404ccd2000000000 01-01 08:00:03.388 I/DEBUG(929):404ccd2400000000 01-01 08:00:03.388 I/DEBUG(929):404ccd2800000000 01-01 08:00:03.388 I/DEBUG(929):404ccd2c00000000 01-01 08:00:03.388 I/DEBUG(929):404ccd3000000000 01-01 08:00:03.388 I/DEBUG(929):404ccd3400000073 01-01 08:00:03.388 I/DEBUG(929):404ccd3800000000 01-01 08:00:03.388 I/DEBUG(929):404ccd3cffffffff 01-01 08:00:03.388 I/DEBUG(929):404ccd40404ccddc 01-01 08:00:03.388 I/DEBUG(929):404ccd444001d85a/system/bin/vold 01-01 08:00:03.388 I/DEBUG(929):404ccd4800000000 01-01 08:00:03.388 I/DEBUG(929):404ccd4c00000034 01-01 08:00:03.388 I/DEBUG(929):404ccd5000000000 01-01 08:00:03.388 I/DEBUG(929):404ccd5400000000 01-01 08:00:03.388 I/DEBUG(929):404ccd584001d824/system/bin/vold 01-01 08:00:03.388 I/DEBUG(929):404ccd5c00000000 01-01 08:00:03.388 I/DEBUG(929):................ 01-01 08:00:03.388 I/DEBUG(929):#02404cd40000000000 01-01 08:00:03.388 I/DEBUG(929):404cd40400000000 01-01 08:00:03.388 I/DEBUG(929):404cd40800000000 01-01 08:00:03.388 I/DEBUG(929):404cd40c00000000 01-01 08:00:03.388 I/DEBUG(929):404cd41000004000 01-01 08:00:03.388 I/DEBUG(929):404cd414404cd474 01-01 08:00:03.388 I/DEBUG(929):404cd4184014d498/system/lib/libc.so 01-01 08:00:03.388 I/DEBUG(929):404cd41c000003ff 01-01 08:00:03.388 I/DEBUG(929):404cd420ffff0208[vectors] 01-01 08:00:03.388 I/DEBUG(929):404cd424404cd474 01-01 08:00:03.388 I/DEBUG(929):404cd428000003ff 01-01 08:00:03.388 I/DEBUG(929):404cd42c4001d578/system/bin/vold 01-01 08:00:03.388 I/DEBUG(929):404cd43000000003 01-01 08:00:03.388 I/DEBUG(929):404cd434404cd474 01-01 08:00:03.388 I/DEBUG(929):404cd43800000003 01-01 08:00:03.388 I/DEBUG(929):404cd43c401072a3/system/lib/liblog.so (__android_log_buf_write+186) 01-01 08:00:03.388 I/DEBUG(929):................ 01-01 08:00:03.392 I/DEBUG(929): 01-01 08:00:03.392 I/DEBUG(929): memory near r4: 01-01 08:00:03.392 I/DEBUG(929):404cd870 404cdb7c 689886ea 40021d88 404cd8b4 01-01 08:00:03.392 I/DEBUG(929):404cd880 404cd9fc 404cdb7c 40010fdb 4001d824 01-01 08:00:03.392 I/DEBUG(929):404cd890 0000000e 00000000 00000000 00000000 01-01 08:00:03.392 I/DEBUG(929):404cd8a0 00000000 40584a00 40584af8 40584be8 01-01 08:00:03.392 I/DEBUG(929):404cd8b0 00000000 0000000e 000000b3 0000000e 01-01 08:00:03.392 I/DEBUG(929):404cd8c0 40584bb6 00000000 00000000 00000000 01-01 08:00:03.392 I/DEBUG(929):404cd8d0 401815fc 000000f9 000000c0 000000bf 01-01 08:00:03.392 I/DEBUG(929):404cd8e0 0000655f 40021d88 00000001 40129b39 01-01 08:00:03.392 I/DEBUG(929):404cd8f0 404cd968 00000000 00000000 00000000 01-01 08:00:03.392 I/DEBUG(929):404cd900 00004000 404cd9f0 00000000 7fffffdb 01-01 08:00:03.392 I/DEBUG(929):404cd910 ffff0208 689886ea 7fffffff 689886ea 01-01 08:00:03.392 I/DEBUG(929):404cd920 00000000 00000000 00000000 00000000 01-01 08:00:03.392 I/DEBUG(929):404cd930 00000000 00000000 404cda0c 404cd9fc 01-01 08:00:03.392 I/DEBUG(929):404cd940 404cdb7c 4057217c 40572158 40021d88 01-01 08:00:03.392 I/DEBUG(929):404cd950 00000001 40129aeb 404cd9cc 00000000 01-01 08:00:03.392 I/DEBUG(929):404cd960 404cd9d4 00000000 00000000 404cda60 01-01 08:00:03.392 I/DEBUG(929): 01-01 08:00:03.392 I/DEBUG(929): memory near r8: 01-01 08:00:03.392 I/DEBUG(929):404ccdbc 00000000 00000000 00000000 00000000 01-01 08:00:03.392 I/DEBUG(929):404ccdcc 00000000 00000000 4001d824 00000034 01-01 08:00:03.392 I/DEBUG(929):404ccddc 00000000 00000000 00000000 00000000 01-01 08:00:03.392 I/DEBUG(929):404ccdec 00000000 00000000 00000000 00000000 01-01 08:00:03.392 I/DEBUG(929):404ccdfc 00000000 00000000 00000000 00000000 01-01 08:00:03.392 I/DEBUG(929):404cce0c 00000000 00000000 00000000 00000000 01-01 08:00:03.392 I/DEBUG(929):404cce1c 00000000 404cd60f 40128f73 404cd5ed 01-01 08:00:03.392 I/DEBUG(929):404cce2c 40128f73 404cd55c 404ccee0 00000000 01-01 08:00:03.392 I/DEBUG(929):404cce3c 404ccee0 00000002 4001d68f 00000001 01-01 08:00:03.392 I/DEBUG(929):404cce4c 404ccf24 404cd55c ffffffff fffffff7 01-01 08:00:03.392 I/DEBUG(929):404cce5c 4012a667 404cd9dc 4012b88d 00000000 01-01 08:00:03.392 I/DEBUG(929):404cce6c 00000000 00000000 00000073 00000000 01-01 08:00:03.392 I/DEBUG(929):404cce7c 00000073 00000008 00000000 00000009 01-01 08:00:03.392 I/DEBUG(929):404cce8c 4001d68e 00000000 00000032 00000000 01-01 08:00:03.392 I/DEBUG(929):404cce9c 00000000 4001d664 00000000 4014d498 01-01 08:00:03.392 I/DEBUG(929):404cceac 4014d4a8 00000000 40156228 00000000 01-01 08:00:03.392 I/DEBUG(929): 01-01 08:00:03.392 I/DEBUG(929): memory near r9: 01-01 08:00:03.392 I/DEBUG(929):404cd3f4 40021d88 00000001 4012c307 00000000 01-01 08:00:03.392 I/DEBUG(929):404cd404 00000000 00000000 00000000 00004000 01-01 08:00:03.392 I/DEBUG(929):404cd414 404cd474 4014d498 000003ff ffff0208 01-01 08:00:03.392 I/DEBUG(929):404cd424 404cd474 000003ff 4001d578 00000003 01-01 08:00:03.392 I/DEBUG(929):404cd434 404cd474 00000003 401072a3 00000000 01-01 08:00:03.392 I/DEBUG(929):404cd444 404cd404 404cd444 00000001 4001d578 01-01 08:00:03.396 I/DEBUG(929):404cd454 0000000d 404cd474 0000002e 40156228 01-01 08:00:03.396 I/DEBUG(929):404cd464 4001d578 40156228 401073a1 404cd890 01-01 08:00:03.396 I/DEBUG(929):404cd474 6563736a 64206573 6c707369 69207961 01-01 08:00:03.396 I/DEBUG(929):404cd484 7664206e 61682020 656c646e 74726150 01-01 08:00:03.396 I/DEBUG(929):404cd494 6f697469 6464416e 33206465 0000000a 01-01 08:00:03.396 I/DEBUG(929):404cd4a4 00000000 00000000 38663735 62353536 01-01 08:00:03.396 I/DEBUG(929):404cd4b4 00000000 00000000 00000000 00000000 01-01 08:00:03.396 I/DEBUG(929):404cd4c4 00000000 00000000 00000000 00000000 01-01 08:00:03.396 I/DEBUG(929):404cd4d4 00000000 00000000 00000000 00000000 01-01 08:00:03.396 I/DEBUG(929):404cd4e4 00000000 00000000 00000000 00000000


须要分析上面的DEBUG,仅仅须要提取一部分内容然后保存到一个 txt 文本里面,提取例如以下内容:



#00pc 00019570/system/lib/libc.so #01pc 0001febd/system/lib/libc.so #02pc 00021303/system/lib/libc.so #03pc 0000139d/system/lib/liblog.so #04pc 0000caa9/system/bin/vold


保存到error.txt,须要注意保存内容的间隔对齐。



二.python须要一个分析上面提取出来的error.txt  DEBUG 信息 DEBUG.py:

#!/usr/bin/python # stack symbol parser import os import string import sys#define android product name ANDROID_PRODUCT_NAME = ' gotechcn' ANDROID_WORKSPACE = os.getcwd()+" /" # addr2line tool path and symbol path addr2line_tool = ANDROID_WORKSPACE + ' prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-addr2line' symbol_dir = ANDROID_WORKSPACE + ' out/target/product/' + ANDROID_PRODUCT_NAME +' /symbols' symbol_bin = symbol_dir + ' /system/bin/' symbol_lib = symbol_dir + ' /system/lib/' class ReadLog: def __init__(self,filename): self.logname = filename def parse(self): f = file(self.logname,' r' ) lines = f.readlines() if lines != []: print ' read file ok' else: print ' read file failed' result =[] for line in lines: if line.find(' stack' ) != -1: print ' stop search' break elif line.find(' system' ) != -1: #print ' find one item' + line result.append(line) return resultclass ParseContent: def __init__(self,addr,lib): self.address = addr # pc address self.exename = lib# executable or shared library def addr2line(self): cmd = addr2line_tool + " -C -f -s -e " + symbol_dir + self.exename + " " + self.address #print cmd stream = os.popen(cmd) lines = stream.readlines() list = map(string.strip,lines) return listinputarg = sys.argv if len(inputarg) < 2: print ' Please input panic log' exit()filename = inputarg[1] readlog = ReadLog(filename) inputlist = readlog.parse()for item in inputlist: itemsplit = item.split() test = ParseContent(itemsplit[-2],itemsplit[-1]) list = test.addr2line() print " %-30s%s" % (list[1],list[0])


这个python脚本是google提供的,用来分析DEBUG,须要注意的是配置自己相相应的ANDROID_PRODUCT_NAME,用来在你的android源代码里面找相应的工具。我的product_name 为 “gotechcn”。

addr2line_tool 的路径各个android 版本号可能也有所不同,须要自己依据自己的源代码进行配置.
我这android4.2 还须要cp OUT/system/lib/egl/libGLES_android.so 到 OUT/system/lib文件夹下 供上面的脚本使用


三.解析
在上面两步做好之后。将DEBUG.py  以及 error.txt  cp 到 android 源代码的根文件夹下,运行:

python DEBUG.py error.txt


依据我上面的error.txt 可得到例如以下结果:

read file ok strlen.c:52strlen string.h:221strlen vsnprintf.c:61vsnprintf stdio.h:490__android_log_buf_print DirectVolume.cpp:291DirectVolume::handleDiskChanged(char const*, NetlinkEvent*)


这就是出问题的根源,可依据这个DEBUG




























    推荐阅读