#!/usr/bin/python# stack symbol parser import osimport stringimport sys 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 def printHelp(prog):    print 'Useage: %s <-w work_path> [-p product_name] <-f file_name>' % (prog)    print '        %s -h' % (prog)    print '    -w work_path      the android source code path'    print '    -p product_name   the android product name'    print '    -f file_name      the error info name'    print '    -h                print help info' hasError = False def noArgError(option):    global hasError    print 'option \'%s\' need argument!' % (option)    hasError = True def argError(index, info):    global hasError    if index == '-w':        print 'argument work_path \'%s\' error!' % (info)    if index == '-p':        print 'argument product_name \'%s\' error!' % (info)    if index == '-f':        print 'argument file_name \'%s\' error!' % (info)    hasError = True argv = sys.argvargc = len(argv)if argc < 2:    printHelp(argv[0])    exit() #define android product nameANDROID_PRODUCT_NAME = 'generic'ANDROID_WORKSPACE = "None"FILE_NAME = 'None' arg_index = 1while arg_index < argc:#    print 'check argv[%d] (%s) ' % (arg_index, argv[arg_index])    if argv[arg_index] == '-h':        printHelp(argv[0])        exit()    elif argv[arg_index] == '-w':        arg_index = arg_index + 1        if (arg_index == argc):            noArgError(argv[arg_index - 1])            continue        ANDROID_WORKSPACE = argv[arg_index]    elif argv[arg_index] == '-p':        arg_index = arg_index + 1        if (arg_index == argc):            noArgError(argv[arg_index - 1])            continue        ANDROID_PRODUCT_NAME = argv[arg_index]    elif argv[arg_index] == '-f':        arg_index = arg_index + 1        if (arg_index == argc):            noArgError(argv[arg_index - 1])            continue        FILE_NAME = argv[arg_index]    else :        print 'error argument ', argv[arg_index]    arg_index = arg_index + 1 product_dir = ANDROID_WORKSPACE + '/out/target/product/' + ANDROID_PRODUCT_NAME if ANDROID_WORKSPACE == 'None' or os.path.exists(ANDROID_WORKSPACE) == False:    argError('-w', ANDROID_WORKSPACE) if ANDROID_PRODUCT_NAME == 'None' or os.path.exists(product_dir) == False:    argError('-p', ANDROID_PRODUCT_NAME)    print 'product_dir is \'%s\'.' % (product_dir) if FILE_NAME == 'None' or os.path.isfile(FILE_NAME) == False:    argError('-f', FILE_NAME) if hasError == True:    printHelp(argv[0])    exit() # addr2line tool path and symbol pathaddr2line_tool = ANDROID_WORKSPACE + '/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-addr2line'symbol_dir = product_dir +'/symbols'symbol_bin = symbol_dir + '/system/bin/'symbol_lib = symbol_dir + '/system/lib/' readlog = ReadLog(FILE_NAME)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])

更多相关文章

  1. 代码中设置drawableleft
  2. android 3.0 隐藏 系统标题栏
  3. Android开发中activity切换动画的实现
  4. Android(安卓)学习 笔记_05. 文件下载
  5. Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
  6. 技术博客汇总
  7. android 2.3 wifi (一)
  8. AndRoid Notification的清空和修改
  9. Android中的Chronometer

随机推荐

  1. android打开前置摄像头和后置摄像头
  2. 屏幕方向android:screenOrientation
  3. android 传感器
  4. Android官方架构组件:Lifecycle
  5. Android兼容性优化-Android 8.0设置Activ
  6. Image
  7. 局域网调试Android
  8. Android 源码编译如何确定模块安装的位置
  9. Android Dimension
  10. EditText focus