分享

Android——DEBUG 堆栈

 James130 2015-10-24
        当android系统运行出现死机等致命错误的时候,一般会有堆栈的DEBUG打印信息,一般直接看根本看不出问题是出在哪里!记录下我android4.2 的DEBUG 堆栈log的方法.

一.DEBUG log

这是我出现错误的堆栈信息:

  1. 01-01 08:00:03.376 I/DEBUG   (  929):     r0 0000000e  r1 00000000  r2 00000002  r3 00000000  
  2. 01-01 08:00:03.376 I/DEBUG   (  929):     r4 404cd890  r5 00000002  r6 00000000  r7 0000000e  
  3. 01-01 08:00:03.376 I/DEBUG   (  929):     r8 404ccddc  r9 404cd414  sl 404cd414  fp 404cd894  
  4. 01-01 08:00:03.376 I/DEBUG   (  929):     ip 00000073  sp 404ccd20  lr 4012aec1  pc 40124570  cpsr 20000010  
  5. 01-01 08:00:03.376 I/DEBUG   (  929):     d0  7664206e69207961  d1  656c646e61682020  
  6. 01-01 08:00:03.376 I/DEBUG   (  929):     d2  6f69746974726150  d3  332064656464416e  
  7. 01-01 08:00:03.376 I/DEBUG   (  929):     d4  30636d6d2f30636d  d5  6c622f313030303a  
  8. 01-01 08:00:03.376 I/DEBUG   (  929):     d6  62636d6d2f6b636f  d7  62636d6d2f306b6c  
  9. 01-01 08:00:03.376 I/DEBUG   (  929):     d8  0000000000000000  d9  0000000000000000  
  10. 01-01 08:00:03.376 I/DEBUG   (  929):     d10 0000000000000000  d11 0000000000000000  
  11. 01-01 08:00:03.376 I/DEBUG   (  929):     d12 0000000000000000  d13 0000000000000000  
  12. 01-01 08:00:03.376 I/DEBUG   (  929):     d14 0000000000000000  d15 0000000000000000  
  13. 01-01 08:00:03.376 I/DEBUG   (  929):     d16 000000000c7f0000  d17 000000000c800000  
  14. 01-01 08:00:03.376 I/DEBUG   (  929):     d18 4163fc8780000000  d19 0000000000000000  
  15. 01-01 08:00:03.376 I/DEBUG   (  929):     d20 0000000000000000  d21 0000000000000000  
  16. 01-01 08:00:03.376 I/DEBUG   (  929):     d22 0000000000000000  d23 0000000000000000  
  17. 01-01 08:00:03.376 I/DEBUG   (  929):     d24 0000000000000000  d25 0000000000000000  
  18. 01-01 08:00:03.376 I/DEBUG   (  929):     d26 0000000000000000  d27 0000000000000000  
  19. 01-01 08:00:03.376 I/DEBUG   (  929):     d28 0000000000000000  d29 0000000000000000  
  20. 01-01 08:00:03.376 I/DEBUG   (  929):     d30 0000000000000000  d31 0000000000000000  
  21. 01-01 08:00:03.376 I/DEBUG   (  929):     scr 00000010  
  22. 01-01 08:00:03.380 I/DEBUG   (  929):   
  23. 01-01 08:00:03.380 I/DEBUG   (  929): backtrace:  
  24. 01-01 08:00:03.380 I/DEBUG   (  929):     #00  pc 00019570  /system/lib/libc.so (strlen+16)  
  25. 01-01 08:00:03.380 I/DEBUG   (  929):     #01  pc 0001febd  /system/lib/libc.so (__vfprintf+2124)  
  26. 01-01 08:00:03.380 I/DEBUG   (  929):     #02  pc 00021303  /system/lib/libc.so (vsnprintf+70)  
  27. 01-01 08:00:03.380 I/DEBUG   (  929):     #03  pc 0000139d  /system/lib/liblog.so (__android_log_buf_print+44)  
  28. 01-01 08:00:03.380 I/DEBUG   (  929):     #04  pc 0000cfd7  /system/bin/vold  
  29. 01-01 08:00:03.380 I/DEBUG   (  929):   
  30. 01-01 08:00:03.380 I/DEBUG   (  929): stack:  
  31. 01-01 08:00:03.380 I/DEBUG   (  929):          404ccce0  404cd474    
  32. 01-01 08:00:03.380 I/DEBUG   (  929):          404ccce4  40128f73  /system/lib/libc.so  
  33. 01-01 08:00:03.380 I/DEBUG   (  929):          404ccce8  404cd414    
  34. 01-01 08:00:03.380 I/DEBUG   (  929):          404cccec  404ccd98    
  35. 01-01 08:00:03.380 I/DEBUG   (  929):          404cccf0  00000000    
  36. 01-01 08:00:03.380 I/DEBUG   (  929):          404cccf4  404ccd98    
  37. 01-01 08:00:03.380 I/DEBUG   (  929):          404cccf8  00000001    
  38. 01-01 08:00:03.384 I/DEBUG   (  929):          404cccfc  4001d821  /system/bin/vold  
  39. 01-01 08:00:03.384 I/DEBUG   (  929):          404ccd00  0000002d    
  40. 01-01 08:00:03.384 I/DEBUG   (  929):          404ccd04  404ccddc    
  41. 01-01 08:00:03.384 I/DEBUG   (  929):          404ccd08  404cd414    
  42. 01-01 08:00:03.384 I/DEBUG   (  929):          404ccd0c  ffffffff    
  43. 01-01 08:00:03.388 I/DEBUG   (  929):          404ccd10  00000001    
  44. 01-01 08:00:03.388 I/DEBUG   (  929):          404ccd14  4012a667  /system/lib/libc.so  
  45. 01-01 08:00:03.388 I/DEBUG   (  929):          404ccd18  df0027ad    
  46. 01-01 08:00:03.388 I/DEBUG   (  929):          404ccd1c  00000000    
  47. 01-01 08:00:03.388 I/DEBUG   (  929):     #00  404ccd20  00000000    
  48. 01-01 08:00:03.388 I/DEBUG   (  929):          ........  ........  
  49. 01-01 08:00:03.388 I/DEBUG   (  929):     #01  404ccd20  00000000    
  50. 01-01 08:00:03.388 I/DEBUG   (  929):          404ccd24  00000000    
  51. 01-01 08:00:03.388 I/DEBUG   (  929):          404ccd28  00000000    
  52. 01-01 08:00:03.388 I/DEBUG   (  929):          404ccd2c  00000000    
  53. 01-01 08:00:03.388 I/DEBUG   (  929):          404ccd30  00000000    
  54. 01-01 08:00:03.388 I/DEBUG   (  929):          404ccd34  00000073    
  55. 01-01 08:00:03.388 I/DEBUG   (  929):          404ccd38  00000000    
  56. 01-01 08:00:03.388 I/DEBUG   (  929):          404ccd3c  ffffffff    
  57. 01-01 08:00:03.388 I/DEBUG   (  929):          404ccd40  404ccddc    
  58. 01-01 08:00:03.388 I/DEBUG   (  929):          404ccd44  4001d85a  /system/bin/vold  
  59. 01-01 08:00:03.388 I/DEBUG   (  929):          404ccd48  00000000    
  60. 01-01 08:00:03.388 I/DEBUG   (  929):          404ccd4c  00000034    
  61. 01-01 08:00:03.388 I/DEBUG   (  929):          404ccd50  00000000    
  62. 01-01 08:00:03.388 I/DEBUG   (  929):          404ccd54  00000000    
  63. 01-01 08:00:03.388 I/DEBUG   (  929):          404ccd58  4001d824  /system/bin/vold  
  64. 01-01 08:00:03.388 I/DEBUG   (  929):          404ccd5c  00000000    
  65. 01-01 08:00:03.388 I/DEBUG   (  929):          ........  ........  
  66. 01-01 08:00:03.388 I/DEBUG   (  929):     #02  404cd400  00000000    
  67. 01-01 08:00:03.388 I/DEBUG   (  929):          404cd404  00000000    
  68. 01-01 08:00:03.388 I/DEBUG   (  929):          404cd408  00000000    
  69. 01-01 08:00:03.388 I/DEBUG   (  929):          404cd40c  00000000    
  70. 01-01 08:00:03.388 I/DEBUG   (  929):          404cd410  00004000    
  71. 01-01 08:00:03.388 I/DEBUG   (  929):          404cd414  404cd474    
  72. 01-01 08:00:03.388 I/DEBUG   (  929):          404cd418  4014d498  /system/lib/libc.so  
  73. 01-01 08:00:03.388 I/DEBUG   (  929):          404cd41c  000003ff    
  74. 01-01 08:00:03.388 I/DEBUG   (  929):          404cd420  ffff0208  [vectors]  
  75. 01-01 08:00:03.388 I/DEBUG   (  929):          404cd424  404cd474    
  76. 01-01 08:00:03.388 I/DEBUG   (  929):          404cd428  000003ff    
  77. 01-01 08:00:03.388 I/DEBUG   (  929):          404cd42c  4001d578  /system/bin/vold  
  78. 01-01 08:00:03.388 I/DEBUG   (  929):          404cd430  00000003    
  79. 01-01 08:00:03.388 I/DEBUG   (  929):          404cd434  404cd474    
  80. 01-01 08:00:03.388 I/DEBUG   (  929):          404cd438  00000003    
  81. 01-01 08:00:03.388 I/DEBUG   (  929):          404cd43c  401072a3  /system/lib/liblog.so (__android_log_buf_write+186)  
  82. 01-01 08:00:03.388 I/DEBUG   (  929):          ........  ........  
  83. 01-01 08:00:03.392 I/DEBUG   (  929):   
  84. 01-01 08:00:03.392 I/DEBUG   (  929): memory near r4:  
  85. 01-01 08:00:03.392 I/DEBUG   (  929):     404cd870 404cdb7c 689886ea 40021d88 404cd8b4    
  86. 01-01 08:00:03.392 I/DEBUG   (  929):     404cd880 404cd9fc 404cdb7c 40010fdb 4001d824    
  87. 01-01 08:00:03.392 I/DEBUG   (  929):     404cd890 0000000e 00000000 00000000 00000000    
  88. 01-01 08:00:03.392 I/DEBUG   (  929):     404cd8a0 00000000 40584a00 40584af8 40584be8    
  89. 01-01 08:00:03.392 I/DEBUG   (  929):     404cd8b0 00000000 0000000e 000000b3 0000000e    
  90. 01-01 08:00:03.392 I/DEBUG   (  929):     404cd8c0 40584bb6 00000000 00000000 00000000    
  91. 01-01 08:00:03.392 I/DEBUG   (  929):     404cd8d0 401815fc 000000f9 000000c0 000000bf    
  92. 01-01 08:00:03.392 I/DEBUG   (  929):     404cd8e0 0000655f 40021d88 00000001 40129b39    
  93. 01-01 08:00:03.392 I/DEBUG   (  929):     404cd8f0 404cd968 00000000 00000000 00000000    
  94. 01-01 08:00:03.392 I/DEBUG   (  929):     404cd900 00004000 404cd9f0 00000000 7fffffdb    
  95. 01-01 08:00:03.392 I/DEBUG   (  929):     404cd910 ffff0208 689886ea 7fffffff 689886ea    
  96. 01-01 08:00:03.392 I/DEBUG   (  929):     404cd920 00000000 00000000 00000000 00000000    
  97. 01-01 08:00:03.392 I/DEBUG   (  929):     404cd930 00000000 00000000 404cda0c 404cd9fc    
  98. 01-01 08:00:03.392 I/DEBUG   (  929):     404cd940 404cdb7c 4057217c 40572158 40021d88    
  99. 01-01 08:00:03.392 I/DEBUG   (  929):     404cd950 00000001 40129aeb 404cd9cc 00000000    
  100. 01-01 08:00:03.392 I/DEBUG   (  929):     404cd960 404cd9d4 00000000 00000000 404cda60    
  101. 01-01 08:00:03.392 I/DEBUG   (  929):   
  102. 01-01 08:00:03.392 I/DEBUG   (  929): memory near r8:  
  103. 01-01 08:00:03.392 I/DEBUG   (  929):     404ccdbc 00000000 00000000 00000000 00000000    
  104. 01-01 08:00:03.392 I/DEBUG   (  929):     404ccdcc 00000000 00000000 4001d824 00000034    
  105. 01-01 08:00:03.392 I/DEBUG   (  929):     404ccddc 00000000 00000000 00000000 00000000    
  106. 01-01 08:00:03.392 I/DEBUG   (  929):     404ccdec 00000000 00000000 00000000 00000000    
  107. 01-01 08:00:03.392 I/DEBUG   (  929):     404ccdfc 00000000 00000000 00000000 00000000    
  108. 01-01 08:00:03.392 I/DEBUG   (  929):     404cce0c 00000000 00000000 00000000 00000000    
  109. 01-01 08:00:03.392 I/DEBUG   (  929):     404cce1c 00000000 404cd60f 40128f73 404cd5ed    
  110. 01-01 08:00:03.392 I/DEBUG   (  929):     404cce2c 40128f73 404cd55c 404ccee0 00000000    
  111. 01-01 08:00:03.392 I/DEBUG   (  929):     404cce3c 404ccee0 00000002 4001d68f 00000001    
  112. 01-01 08:00:03.392 I/DEBUG   (  929):     404cce4c 404ccf24 404cd55c ffffffff fffffff7    
  113. 01-01 08:00:03.392 I/DEBUG   (  929):     404cce5c 4012a667 404cd9dc 4012b88d 00000000    
  114. 01-01 08:00:03.392 I/DEBUG   (  929):     404cce6c 00000000 00000000 00000073 00000000    
  115. 01-01 08:00:03.392 I/DEBUG   (  929):     404cce7c 00000073 00000008 00000000 00000009    
  116. 01-01 08:00:03.392 I/DEBUG   (  929):     404cce8c 4001d68e 00000000 00000032 00000000    
  117. 01-01 08:00:03.392 I/DEBUG   (  929):     404cce9c 00000000 4001d664 00000000 4014d498    
  118. 01-01 08:00:03.392 I/DEBUG   (  929):     404cceac 4014d4a8 00000000 40156228 00000000    
  119. 01-01 08:00:03.392 I/DEBUG   (  929):   
  120. 01-01 08:00:03.392 I/DEBUG   (  929): memory near r9:  
  121. 01-01 08:00:03.392 I/DEBUG   (  929):     404cd3f4 40021d88 00000001 4012c307 00000000    
  122. 01-01 08:00:03.392 I/DEBUG   (  929):     404cd404 00000000 00000000 00000000 00004000    
  123. 01-01 08:00:03.392 I/DEBUG   (  929):     404cd414 404cd474 4014d498 000003ff ffff0208    
  124. 01-01 08:00:03.392 I/DEBUG   (  929):     404cd424 404cd474 000003ff 4001d578 00000003    
  125. 01-01 08:00:03.392 I/DEBUG   (  929):     404cd434 404cd474 00000003 401072a3 00000000    
  126. 01-01 08:00:03.392 I/DEBUG   (  929):     404cd444 404cd404 404cd444 00000001 4001d578    
  127. 01-01 08:00:03.396 I/DEBUG   (  929):     404cd454 0000000d 404cd474 0000002e 40156228    
  128. 01-01 08:00:03.396 I/DEBUG   (  929):     404cd464 4001d578 40156228 401073a1 404cd890    
  129. 01-01 08:00:03.396 I/DEBUG   (  929):     404cd474 6563736a 64206573 6c707369 69207961    
  130. 01-01 08:00:03.396 I/DEBUG   (  929):     404cd484 7664206e 61682020 656c646e 74726150    
  131. 01-01 08:00:03.396 I/DEBUG   (  929):     404cd494 6f697469 6464416e 33206465 0000000a    
  132. 01-01 08:00:03.396 I/DEBUG   (  929):     404cd4a4 00000000 00000000 38663735 62353536    
  133. 01-01 08:00:03.396 I/DEBUG   (  929):     404cd4b4 00000000 00000000 00000000 00000000    
  134. 01-01 08:00:03.396 I/DEBUG   (  929):     404cd4c4 00000000 00000000 00000000 00000000    
  135. 01-01 08:00:03.396 I/DEBUG   (  929):     404cd4d4 00000000 00000000 00000000 00000000    
  136. 01-01 08:00:03.396 I/DEBUG   (  929):     404cd4e4 00000000 00000000 00000000 00000000  
需要分析上面的DEBUG,只需要提取一部分内容然后保存到一个 txt 文本里面,提取如下内容
  1. #00  pc 00019570  /system/lib/libc.so  
  2. #01  pc 0001febd  /system/lib/libc.so  
  3. #02  pc 00021303  /system/lib/libc.so  
  4. #03  pc 0000139d  /system/lib/liblog.so  
  5. #04  pc 0000caa9  /system/bin/vold 
保存到error.txt,需要注意保存内容的间隔对齐。

二.python

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

  1. #!/usr/bin/python  
  2. # stack symbol parser  
  3. import os  
  4. import string  
  5. import sys  
  6.   
  7.   
  8. #define android product name  
  9. ANDROID_PRODUCT_NAME = 'gotechcn'  
  10.   
  11.   
  12. ANDROID_WORKSPACE = os.getcwd()+"/"  
  13.   
  14.   
  15. # addr2line tool path and symbol path  
  16. addr2line_tool = ANDROID_WORKSPACE + 'prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-addr2line'  
  17. symbol_dir = ANDROID_WORKSPACE + 'out/target/product/' + ANDROID_PRODUCT_NAME +'/symbols'  
  18. symbol_bin = symbol_dir + '/system/bin/'  
  19. symbol_lib = symbol_dir + '/system/lib/'  
  20.   
  21.   
  22.   
  23.   
  24. class ReadLog:  
  25.     def __init__(self,filename):  
  26.         self.logname = filename  
  27.     def parse(self):  
  28.         f = file(self.logname,'r')  
  29.         lines = f.readlines()  
  30.         if lines != []:  
  31.             print 'read file ok'  
  32.         else:  
  33.             print 'read file failed'  
  34.         result =[]  
  35.         for line in lines:  
  36.             if line.find('stack') != -1:  
  37.                 print 'stop search'  
  38.                 break  
  39.             elif line.find('system') != -1:  
  40.                 #print 'find one item' + line  
  41.                 result.append(line)  
  42.         return result  
  43.   
  44.   
  45. class ParseContent:  
  46.     def __init__(self,addr,lib):  
  47.             self.address = addr # pc address  
  48.             self.exename = lib  # executable or shared library  
  49.     def addr2line(self):  
  50.         cmd = addr2line_tool + " -C -f -s -e " + symbol_dir + self.exename + " " + self.address  
  51.         #print cmd  
  52.         stream = os.popen(cmd)  
  53.         lines = stream.readlines()  
  54.         list = map(string.strip,lines)  
  55.         return list  
  56.       
  57. inputarg = sys.argv  
  58. if len(inputarg) < 2:  
  59.     print 'Please input panic log'  
  60.     exit()  
  61.   
  62.   
  63. filename = inputarg[1]  
  64. readlog = ReadLog(filename)  
  65. inputlist = readlog.parse()  
  66.   
  67.   
  68. for item in inputlist:  
  69.     itemsplit = item.split()  
  70.     test = ParseContent(itemsplit[-2],itemsplit[-1])  
  71.     list = test.addr2line()  
  72.     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 源码的根目录下,执行:

  1. python DEBUG.py error.txt  

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

  1. read file ok  
  2. strlen.c:52                   strlen  
  3. string.h:221                  strlen  
  4. vsnprintf.c:61                vsnprintf  
  5. stdio.h:490                   __android_log_buf_print  
  6. DirectVolume.cpp:291          DirectVolume::handleDiskChanged(char const*, NetlinkEvent*) 
这就是出问题的根源,可根据这个DEBUG

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多