Android——DEBUG 堆栈

当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

时间: 2024-10-25 10:27:42

Android——DEBUG 堆栈的相关文章

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

使用arm-eabi-addr2line工具跟踪Android调用堆栈作者:liangshengyang转自:http://www.linuxidc.com/Linux/2011-01/31803.htm 在通常的C/C++代码中,可以通过响应对内存操作不当引起的Segmentation Fault错误即信号SIGSEGV(11)做出响应处理.只要在程序中设置SIGSEGV的handler中,调用libc的backtrace,打出对应的堆栈信息,很快就能找到问题所在.但在Android中,bio

VS2015 Could not locate the Android Debug Bridge (adb.exe).

VS2015 corvoda出现"Could not locate the Android Debug Bridge (adb.exe)." 是由于找不到adb.exe引起,Android sdk环境变量的问题 VS中Android sdk是在注册表中指定的,位置HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Android SDK Tools  键-Path 修改Path值为Android sdk路径,问题解决 注意:sdk路径下要有  \platfo

C语言基础课程 第三课 ADB(Android Debug Bridge)的使用

?? C语言基础课程 第三课 ADB(Android Debug Bridge)的使用 由于前面已经发布过Linux的博客了 基础班将Linux基础命令就不单独发表博客了,本节课主要就是利用adb连接手机进行一个Linux基本命令的复习.而且熟悉手机的底层运作,不用界面操作照样也能安装软件  卸载软件与pc传数据 目  录 1       将android设备通过USB连接到PC. 3 2       查看当前设备... 3 3       进入设备shell. 4 4       执行shel

Android Debug Bridge

[Android Debug Bridge] ADB lets you communicate with an emulator instance or connected Android-powered device. ADB is a client-server program that includes three components: A client, which runs on your development machine(运行于开发机上). You can invoke a

android debug:stack trace

使用 ps 命令查看 目标进程的 pid,比如说是 1200,然后 kill -3 1200 在 /data/anr/traces.txt 中就能找到 进程 1200 中各线程的 stack trace android debug:stack trace,布布扣,bubuko.com

XE7 UP1编译Android Debug时报 “failed to allocate 190397160 bytes for output file: Not enough space”

一个项目,一直编译成Android Debug时没有问题,今天加了一个Frame,在WIN下调试正常时,转为编译输出Android Debug时报下面的错误 [DCC Error] E2597 D:\Embarcadero\Studio\15.0\PlatformSDKs\android-ndk-r9c\toolchains\arm-linux-androideabi-4.6\prebuilt\windows\bin\arm-linux-androideabi-ld.exe: fatal err

Android之独孤口诀:模拟器创建及adb(android debug bridge安卓调试桥)

VGA:640*480 像素 HVGA(half vga):480*320 像素 QVGA(quarter vga):320*240 像素 WVGA(width vga):800*480 像素 FWVGA:854*480 二.adb(android debug bridge:安卓调试桥) 常用命令: pull: adb pull  /storage/sdcard1/DCIM/Camera/IMG_20141124_193236.jpg  abc.jpg  (将 /storage/sdcard1/

eclispe android debug.keystore 密码 别名等信息

前言 今天在使用eclipse编译测试工程的时候,发现由于ADT升级,以前版本的工程使用会有问题,而以前版本的工程由于某些原因不能进行升级,所以我考虑部分工程使用ant编译,在ant编译时候发现keystore找不到了,所以我考虑使用eclipse编译使用的keystore,而在配置的时候需要输入密码,别名等信息,如何查看该keystore的信息呢,接下来便是结果. 介绍 eclispe中进行android工程测试会使用目录 C:\Users\<用户名>.android\debug.keyst

Android 官方命令之Android Debug Bridge(adb)(未完待续)

作者:宋志辉 Android Debug Brideg(adb)是一个多用途的命令行工具.可以与Android虚拟机进行通信或连接真机.它同样提供了访问设备shell的高级命令行操作的权限.它是一个包含以下三部分的客户端-服务端程序: 一个客户端,运行在你的开发设备上.你可以通过adb命令来从shell中调用一个客户端.或者通过ADT插件和DDMS创建adb客户端. 一个服务端,作为一个后台进程运行在你的开发设备中.服务端负责客户端和虚拟机或设备中adb守护进程的通信. 一个守护进程,运行在虚拟