设为首页 加入收藏

TOP

Android 调试.so库文件(一)
2014-11-24 07:29:22 来源: 作者: 【 】 浏览:0
Tags:Android 调试 .so 文件

调试步骤如下:
1/ 将异常的地址信息存到文本文件,并存放在项目根目录;
2/ 使用panic.py解析该文件;
3/ 根据返回的信息(文件名;行号;方法名)调试程序。


以操作第三方的Touch input 输入法为例,过程如下:


# 该输入法的英文和手写OK,操作中文输入法时,出现异常,软键盘消失,异常日志如下


# 保存异常日志,存为文件: 20100205_ime.txt


02-05 06:41:20.045 I/DEBUG ( 551): r0 00000000 r1 00000000 r2 807248ec r3 807248ec
02-05 06:41:20.055 I/DEBUG ( 551): r4 00252d80 r5 00000004 r6 00000001 r7 00000000
02-05 06:41:20.055 I/DEBUG ( 551): r8 beff8550 r9 41459d28 10 41459d18 fp 00000000
02-05 06:41:20.055 I/DEBUG ( 551): ip 8072430c sp beff84f0 lr 80716b4f pc 80717bce cpsr 60000030
02-05 06:41:20.135 I/DEBUG ( 551): #00 pc 00017bce /system/lib/libimezi.so
02-05 06:41:20.135 I/DEBUG ( 551): #01 pc 00010f80 /system/lib/libimezi.so


# 执行脚本


xujianxiang@wingdroid-clone:~/workspace/xujx/wing15$ ./panic.py 20100205_ime.txt
read file ok
/home/xujianxiang/workspace/xujx/wing15/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-addr2line: '/home/xujianxiang/workspace/xujx/wing15/out/target/product/generic/symbols/system/lib/libimezi.so': No such file
Traceback (most recent call last):
File "./panic.py", line 69, in
print "%-30s%s" % (list[1],list[0])
IndexError: list index out of range


# 没找到库文件,因为这个文件是第三方的,只存放在/out/target/product/generic/system/lib/libimezi.so,拷贝一份存到/out/target/product/generic/symbols/system/lib/libimezi.so,再次执行脚本


xujianxiang@wingdroid-clone:~/workspace/xujx/wing15$ ./panic.py 20100205_ime.txt
read file ok
zi81keyd.c:0 Zi8GetTableData
zi81keyd.c:0 Zi8InitializeDynamic


# 成功解析异常,没有zi8库文件所致,更新如下库文件,输入法支持中文拼音。


/system/lib/zi/Zi8DatPYP_CN.z8d
/system/lib/zi/Zi8DatPYS_CN.z8d
/system/lib/zi/Zi8DatZHA_CN.z8d
/system/lib/zi/Zi8DatZHA_HK.z8d
/system/lib/zi/Zi8DatZHA_TW.z8d
/system/lib/zi/Zi8DatZYP_TW.z8d
/system/lib/zi/Zi8DatZYS_TW.z8d


附 panic.py:


1#!/usr/bin/python
2# stack symbol parser
3
4import os
5import string
6import sys
7
8#define android product name
9#ANDROID_PRODUCT_NAME = 'generic'
10ANDROID_PRODUCT_NAME = 'smdk6410'
11
12ANDROID_WORKSPACE = os.getcwd()+"/"
13
14# addr2line tool path and symbol path
15addr2line_tool = ANDROID_WORKSPACE + 'prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-addr2line'
16symbol_dir = ANDROID_WORKSPACE + 'out/target/product/' + ANDROID_PRODUCT_NAME +'/symbols'
17symbol_bin = symbol_dir + '/system/bin/'
18symbol_lib = symbol_dir + '/system/lib/'
19
20class ReadLog:
21 def __init__(self,filename):
22 self.logname = filename
23 def parse(self):
24 f = file(self.logname,'r')
25 lines = f.readlines()
26 if lines != []:
27 print 'read file ok'
28 else:
29 print 'read file failed'
30 result =[]
31 for line in lines:
32 if line.find('stack') != -1:
33 print 'stop search'
34 break
35 elif line.find('system') != -1:
36 #print 'find one item' + line
37 result.append(line)
38 return result
39
40class ParseContent:
41 def __init__(self,addr,lib):
42 self.address = addr # pc address
43 self.exename = lib # executable or shared library
44 def addr2line(self):
45 cmd = addr2line_tool + " -C -f -s -e " + symbol_dir + self.exename + " " + self.address
46 #print cmd
47 st

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Make Android启动的第一个界面 下一篇Android Widget 设计与开发

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·数据库:推荐几款 Re (2025-12-25 12:17:11)
·如何最简单、通俗地 (2025-12-25 12:17:09)
·什么是Redis?为什么 (2025-12-25 12:17:06)
·对于一个想入坑Linux (2025-12-25 11:49:07)
·Linux 怎么读? (2025-12-25 11:49:04)