堆栈错误信息:

I/DEBUG ( 30):r0 afd4d4a4 r1 ffffffff r2 7fffffffr3 afd4d4a4

I/DEBUG ( 30):r4 00000000 r5 ffffffff r6 00000001r7 be9f6ccc

I/DEBUG ( 30):r8 00000000 r9 00000000 10 00000000fp 00000000

I/DEBUG ( 30):ip afd11fcd sp be9f6c38 lr afd107f4pc afd107fc cpsr 80000010

I/DEBUG ( 30):#00 pc 000107fc /system/lib/libc.so

I/DEBUG ( 30):#01 pc 0001ccfe /system/lib/libdtvservice.so

I/DEBUG ( 30):#02 pc 0001c646 /system/lib/libdtvservice.so

I/DEBUG ( 30):#03 pc 0001937e /system/lib/libdtvservice.so

I/DEBUG ( 30):#04 pc 000110f8 /system/lib/libdtvservice.so

I/DEBUG ( 30):#05 pc 000115a8/system/lib/libdtvservice.so

I/DEBUG ( 30):#06 pc 00008852 /system/bin/dtvserver

I/DEBUG ( 30):#07 pc 00014dc8 /system/lib/libc.so

……

方法一:

1.将上面这段信息复制到一个新建的文件中,并保存。例如:test-dtvserver.txt.

2.用panic.py工具解析这段错误信息,panic.py工具的位置为~/android/

// 工具在附件中

运行:

[[email protected] android]$ panic.py test-stack.txt

read file ok

stop search

pr-support.c:258 __gnu_unwind_execute

posix_thread.c:97 destroy_posix_thread

thread.c:293 thread_destroy

workpool.c:215 work_pool_uninitialize

dtvserver.c:203 dtvs_finalize

dtvserver.c:179 dtvs_initialize

DtvServer.cpp:19 main

dlmalloc.c:3890 tmalloc_small

这个就是结果。

使用panic.py的环境问题

1.要有arm-eabi-addr2line工具 ~/android/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/

2.在system/lib/中要有相应的库文件

3.panic.py的存放位置要正确~/android/,也可以自己修改panic.py工具的代码,放在其他地方.

方法二:

如果没有arm-eabi-addr2line工具,但是有arm-eabi-objdump工具

就用第二种方法。

I/DEBUG ( 30):#00 pc 000107fc /system/lib/libc.so

I/DEBUG ( 30):#01 pc 0001ccfe /system/lib/libdtvservice.so

I/DEBUG ( 30):#02 pc 0001c646 /system/lib/libdtvservice.so

I/DEBUG ( 30):#03 pc 0001937e /system/lib/libdtvservice.so

I/DEBUG ( 30):#04 pc 000110f8 /system/lib/libdtvservice.so

I/DEBUG ( 30):#05 pc 000115a8 /system/lib/libdtvservice.so

I/DEBUG ( 30):#06 pc 00008852 /system/bin/dtvserver

I/DEBUG ( 30):#07 pc 00014dc8 /system/lib/libc.so

1.用objdump工具将上面这些对应的库文件反汇编:

运行:arm-eabi-objdump –dS libc.so> libc.dump

//这些库文件路径在out/target/product/generic/obj/SHARED_LIBRARIES/

2.打开反汇编后的库文件。例如:libc.dump。

找到上面错误码提示的地址。例如000107fc。

在这里我们可以找到这行指令所在的函数和文件

以此类推,依次找出这些错误码对应的函数和文件,就可以知道是哪一个函数调用路线出问题了。

panic.py代码

#!/usr/bin/python

# stack symbol parser

import os

import string

import sys

#define android product name 这个视情况而定在out/target/product文件夹下

ANDROID_PRODUCT_NAME = 'generic'

#ANDROID_PRODUCT_NAME = 'smdk6410'

#这里可以修改panic.py工具的存放位置

ANDROID_WORKSPACE = os.getcwd()+"/"

# addr2line tool path and symbol path

addr2line_tool = ANDROID_WORKSPACE +'prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/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

defparse(self):

f =file(self.logname,'r')

lines =f.readlines()

if lines!= []:

print 'read file ok'

else:

print 'read file failed'

result=[]

for linein lines:

ifline.find('stack') != -1:

print 'stop search'

break

elifline.find('system') != -1:

#print 'find one item' + line

result.append(line)

returnresult

class ParseContent:

def__init__(self,addr,lib):

self.address = addr # pc address

self.exename = lib # executableor shared library

defaddr2line(self):

cmd =addr2line_tool + " -C -f -s -e " + symbol_dir + self.exename + "" + self.address

#printcmd

stream =os.popen(cmd)

lines =stream.readlines();

list =map(string.strip,lines)

returnlist

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])


只用过方法二:

[email protected]:~/Android$ arm-eabi-objdump -dS out/target/product/generic/symbols/system/lib/libc.so > libc.dump

原文地址:http://blog.csdn.net/movie0125/article/details/6614983

更多相关文章

  1. android开发数据储存的路径示例
  2. Android(安卓)Studio build dex jar
  3. react-native android 打包
  4. android eclipse debug 调试 Source not found
  5. Android(安卓)DownloadProvider 源码分析
  6. Android二进制文件转码到Base64并通过Post进行提交
  7. 总结一下关于 Android(安卓)10 的适配(备注:只是自己项目中有关联
  8. Android(安卓)浅析 EventBus (一) 使用
  9. Android(安卓)解决支付宝对接问题com.alipay.sdk.app.PayTask/Au

随机推荐

  1. Android点击Button切换多个图片显示
  2. 动态修改Android中strings.xml文件
  3. Android真正的静默安装
  4. Android滚动多TAB悬浮头效果
  5. android 解决listview.notifyDataSetChan
  6. Android 路由框架ARouter最佳实践
  7. Cocos2d-x shareSDK
  8. android socket
  9. Android(安卓)eclipse中程序调试
  10. Android 中自定义 Menu 资源