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

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

一.DEBUG log

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

01-01 08:00:03.376 I/DEBUG   (  929):     r0 0000000e  r1 00000000  r2 00000002  r3 00000000
01-01 08:00:03.376 I/DEBUG ( 929): r4 404cd890 r5 00000002 r6 00000000 r7 0000000e
01-01 08:00:03.376 I/DEBUG ( 929): r8 404ccddc r9 404cd414 sl 404cd414 fp 404cd894
01-01 08:00:03.376 I/DEBUG ( 929): ip 00000073 sp 404ccd20 lr 4012aec1 pc 40124570 cpsr 20000010
01-01 08:00:03.376 I/DEBUG ( 929): d0 7664206e69207961 d1 656c646e61682020
01-01 08:00:03.376 I/DEBUG ( 929): d2 6f69746974726150 d3 332064656464416e
01-01 08:00:03.376 I/DEBUG ( 929): d4 30636d6d2f30636d d5 6c622f313030303a
01-01 08:00:03.376 I/DEBUG ( 929): d6 62636d6d2f6b636f d7 62636d6d2f306b6c
01-01 08:00:03.376 I/DEBUG ( 929): d8 0000000000000000 d9 0000000000000000
01-01 08:00:03.376 I/DEBUG ( 929): d10 0000000000000000 d11 0000000000000000
01-01 08:00:03.376 I/DEBUG ( 929): d12 0000000000000000 d13 0000000000000000
01-01 08:00:03.376 I/DEBUG ( 929): d14 0000000000000000 d15 0000000000000000
01-01 08:00:03.376 I/DEBUG ( 929): d16 000000000c7f0000 d17 000000000c800000
01-01 08:00:03.376 I/DEBUG ( 929): d18 4163fc8780000000 d19 0000000000000000
01-01 08:00:03.376 I/DEBUG ( 929): d20 0000000000000000 d21 0000000000000000
01-01 08:00:03.376 I/DEBUG ( 929): d22 0000000000000000 d23 0000000000000000
01-01 08:00:03.376 I/DEBUG ( 929): d24 0000000000000000 d25 0000000000000000
01-01 08:00:03.376 I/DEBUG ( 929): d26 0000000000000000 d27 0000000000000000
01-01 08:00:03.376 I/DEBUG ( 929): d28 0000000000000000 d29 0000000000000000
01-01 08:00:03.376 I/DEBUG ( 929): d30 0000000000000000 d31 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): #00 pc 00019570 /system/lib/libc.so (strlen+16)
01-01 08:00:03.380 I/DEBUG ( 929): #01 pc 0001febd /system/lib/libc.so (__vfprintf+2124)
01-01 08:00:03.380 I/DEBUG ( 929): #02 pc 00021303 /system/lib/libc.so (vsnprintf+70)
01-01 08:00:03.380 I/DEBUG ( 929): #03 pc 0000139d /system/lib/liblog.so (__android_log_buf_print+44)
01-01 08:00:03.380 I/DEBUG ( 929): #04 pc 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): 404ccce0 404cd474
01-01 08:00:03.380 I/DEBUG ( 929): 404ccce4 40128f73 /system/lib/libc.so
01-01 08:00:03.380 I/DEBUG ( 929): 404ccce8 404cd414
01-01 08:00:03.380 I/DEBUG ( 929): 404cccec 404ccd98
01-01 08:00:03.380 I/DEBUG ( 929): 404cccf0 00000000
01-01 08:00:03.380 I/DEBUG ( 929): 404cccf4 404ccd98
01-01 08:00:03.380 I/DEBUG ( 929): 404cccf8 00000001
01-01 08:00:03.384 I/DEBUG ( 929): 404cccfc 4001d821 /system/bin/vold
01-01 08:00:03.384 I/DEBUG ( 929): 404ccd00 0000002d
01-01 08:00:03.384 I/DEBUG ( 929): 404ccd04 404ccddc
01-01 08:00:03.384 I/DEBUG ( 929): 404ccd08 404cd414
01-01 08:00:03.384 I/DEBUG ( 929): 404ccd0c ffffffff
01-01 08:00:03.388 I/DEBUG ( 929): 404ccd10 00000001
01-01 08:00:03.388 I/DEBUG ( 929): 404ccd14 4012a667 /system/lib/libc.so
01-01 08:00:03.388 I/DEBUG ( 929): 404ccd18 df0027ad
01-01 08:00:03.388 I/DEBUG ( 929): 404ccd1c 00000000
01-01 08:00:03.388 I/DEBUG ( 929): #00 404ccd20 00000000
01-01 08:00:03.388 I/DEBUG ( 929): ........ ........
01-01 08:00:03.388 I/DEBUG ( 929): #01 404ccd20 00000000
01-01 08:00:03.388 I/DEBUG ( 929): 404ccd24 00000000
01-01 08:00:03.388 I/DEBUG ( 929): 404ccd28 00000000
01-01 08:00:03.388 I/DEBUG ( 929): 404ccd2c 00000000
01-01 08:00:03.388 I/DEBUG ( 929): 404ccd30 00000000
01-01 08:00:03.388 I/DEBUG ( 929): 404ccd34 00000073
01-01 08:00:03.388 I/DEBUG ( 929): 404ccd38 00000000
01-01 08:00:03.388 I/DEBUG ( 929): 404ccd3c ffffffff
01-01 08:00:03.388 I/DEBUG ( 929): 404ccd40 404ccddc
01-01 08:00:03.388 I/DEBUG ( 929): 404ccd44 4001d85a /system/bin/vold
01-01 08:00:03.388 I/DEBUG ( 929): 404ccd48 00000000
01-01 08:00:03.388 I/DEBUG ( 929): 404ccd4c 00000034
01-01 08:00:03.388 I/DEBUG ( 929): 404ccd50 00000000
01-01 08:00:03.388 I/DEBUG ( 929): 404ccd54 00000000
01-01 08:00:03.388 I/DEBUG ( 929): 404ccd58 4001d824 /system/bin/vold
01-01 08:00:03.388 I/DEBUG ( 929): 404ccd5c 00000000
01-01 08:00:03.388 I/DEBUG ( 929): ........ ........
01-01 08:00:03.388 I/DEBUG ( 929): #02 404cd400 00000000
01-01 08:00:03.388 I/DEBUG ( 929): 404cd404 00000000
01-01 08:00:03.388 I/DEBUG ( 929): 404cd408 00000000
01-01 08:00:03.388 I/DEBUG ( 929): 404cd40c 00000000
01-01 08:00:03.388 I/DEBUG ( 929): 404cd410 00004000
01-01 08:00:03.388 I/DEBUG ( 929): 404cd414 404cd474
01-01 08:00:03.388 I/DEBUG ( 929): 404cd418 4014d498 /system/lib/libc.so
01-01 08:00:03.388 I/DEBUG ( 929): 404cd41c 000003ff
01-01 08:00:03.388 I/DEBUG ( 929): 404cd420 ffff0208 [vectors]
01-01 08:00:03.388 I/DEBUG ( 929): 404cd424 404cd474
01-01 08:00:03.388 I/DEBUG ( 929): 404cd428 000003ff
01-01 08:00:03.388 I/DEBUG ( 929): 404cd42c 4001d578 /system/bin/vold
01-01 08:00:03.388 I/DEBUG ( 929): 404cd430 00000003
01-01 08:00:03.388 I/DEBUG ( 929): 404cd434 404cd474
01-01 08:00:03.388 I/DEBUG ( 929): 404cd438 00000003
01-01 08:00:03.388 I/DEBUG ( 929): 404cd43c 401072a3 /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 文本里面,提取例如以下内容

#00  pc 00019570  /system/lib/libc.so
#01 pc 0001febd /system/lib/libc.so
#02 pc 00021303 /system/lib/libc.so
#03 pc 0000139d /system/lib/liblog.so
#04 pc 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 result class 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 list inputarg = 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:52 strlen
string.h:221 strlen
vsnprintf.c:61 vsnprintf
stdio.h:490 __android_log_buf_print
DirectVolume.cpp:291 DirectVolume::handleDiskChanged(char const*, NetlinkEvent*)

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

Android——DEBUG 堆栈的更多相关文章

  1. arm-eabi-addr2line工具跟踪Android调用堆栈

    使用arm-eabi-addr2line工具跟踪Android调用堆栈作者:liangshengyang转自:http://www.linuxidc.com/Linux/2011-01/31803.h ...

  2. [ADB]ADB(Android Debug Bridge)简介及基础(不包含命令)

    "Android Debug Bridge (adb) is a versatile command line tool that lets you communicate with an ...

  3. [Android]Android Debug key 的制作

    Android Debug key 的制作 背景 在Android App 开发过程中,我们经常会使用一些第三方的服务,但是很多的第三方服务都会要求我们提供包名,签名安装包,这时候,我们在日常调试时, ...

  4. 用ADB(Android Debug Bridge)实时监测Android程序的运行

      监控Android设备上程序的运行,需要ADB的配合,具体ADB工具的介绍以及命令选项可见博客: http://blog.csdn.net/mliubing2532/article/details ...

  5. Android Debug Bridge

    Android Debug Bridge Introduction     Android Debug Bridge (adb) is a versatile command line tool th ...

  6. Android 官方命令深入分析之Android Debug Bridge(adb)

    作者:宋志辉 Android Debug Brideg(adb)是一个多用途的命令行工具.可以与Android虚拟机进行通信或连接真机.它同样提供了访问设备shell的高级命令行操作的权限.它是一个包 ...

  7. adb ( Android Debug Bridge)

    adb ( Android Debug Bridge) 是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信.它可为各种设备操作提供便利,如安装和调试应用. adb工具的工 ...

  8. Android Debug Bridge命令介绍[转]

    Android Debug Bridge命令介绍 Android Debug Bridge的一些基本命令.这个工具直译过来就是Android调试桥的意思.它提供了强大的特性,例如复制文件到设备或从设备 ...

  9. Android调试桥-Android Debug Birdge详解

    原文:http://android.eoe.cn/topic/summary Android调试桥-Android Debug Birdge Android调试桥(adb)是一个多功能的命令行功具,它 ...

随机推荐

  1. 白话TCP三次握手

    在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认: 第二次握 ...

  2. 【反演复习计划】【bzoj4407】于神之怒加强版

    #include<bits/stdc++.h> #define N 5000010 #define yql 1000000007 using namespace std; typedef ...

  3. 【转】java中的集合和数组

    转载自:http://www.cnblogs.com/summers/p/4094260.html 数组Array和集合的区别: (1)数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型 ...

  4. BZOJ 1207

    1207: [HNOI2004]打鼹鼠 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3089  Solved: 1499[Submit][Statu ...

  5. 《Java编程思想》笔记 第十七章 容器深入研究

    1 容器分类 容器分为Collection集合类,和Map键值对类2种 使用最多的就是第三层的容器类,其实在第三层之上还有一层Abstract 抽象类,如果要实现自己的集合类,可以继承Abstract ...

  6. 【hdoj_2111】SavingHDU

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2111 题目理解:给出一个口袋的容量,若干种宝物的单价和体积,单个的宝物可以分割,待求的是最多能装价值多少的 ...

  7. MATLAB求解方程与方程组

    1.      solve函数 ①求解单个一元方程的数值解 syms x; x0 = double(solve(x +2 - exp(x),x)); 求x+2 = exp(x)的解,结果用double ...

  8. ibatis(sqlmap)中使用in语句的方法

    对于快速学习ibatis而没有过多时间去查阅资料的朋友,比如我,可能有些东西不一定能在快速上手的文档中涉猎到.今天就碰到一个问题,要在分页 查询的同时进行where语句删选操作.由于表记录比较少,因此 ...

  9. yii2中判断数据表是否存在数据库中(原创)

    分为两步: 第一步,找出数据库中所有表名,表名得到的是二维数组. 第二步,判断表名是否存在二维数组中 下面就贴我的代码咯. $table_name =‘table’; $juge = $handle- ...

  10. Burp Suite的使用介绍

    在网上找了一篇关于Burp Suite的使用介绍,感觉写的基础的,下面就copy了,另外还有一篇<BurpSuite实战指南>的pdf是一位好心的“前辈”共享的https://www.gi ...