• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 使用traceview和dmtracedump調試Android代碼(2)

    發表于:2011-08-26來源:CSDN作者:yiyaaixuexi點擊數: 標簽:
    str1=r1.sub(_,all_methods[method_id][1]) str2=r1.sub(_,all_methods[method_id][2]) return str1+_+str2 def gen_dot_script_file(): myoutfile = open(graph.dot, w) myoutfile.write(digraph vanzo {/n/n); for

      str1=r1.sub("_",all_methods[method_id][1])

      str2=r1.sub("_",all_methods[method_id][2])

      return str1+"_"+str2

      def gen_dot_script_file():

      myoutfile = open("graph.dot", "w")

      myoutfile.write("digraph vanzo {/n/n");

      for one in all_methods.keys():

      if parent_methods.has_key(one):

      myoutfile.write(gen_funcname(one)+" [shape=rectangle];/n")

      else:

      if child_methods.has_key(one):

      myoutfile.write(gen_funcname(one)+" [shape=ellipse];/n")

      for one in method_calls.keys():

      for two in method_calls[one]:

      myoutfile.write(gen_funcname(one) + ' -> ' + gen_funcname(two) + ' [label="' + str(method_calls[one][two]) + '" fontsize="10"];/n')

      myoutfile.write("/n}/n");

      myoutfile.close

      ############################################################

      ########################## Script starts from here #########

      ############################################################

      if len(sys.argv) < 2:

      print 'No input file specified.'

      sys.exit()

      if not (os.path.exists(sys.argv[1])):

      print "input file not exists"

      sys.exit()

      #Now handle the text part

      current_section=0

      for line in open(sys.argv[1]):

      line2 = line.strip()

      if (line2.startswith("*")):

      if (line2.startswith("*version")):

      current_section=1

      else:

      if (line2.startswith("*threads")):

      current_section=2

      else:

      if (line2.startswith("*methods")):

      current_section=3

      else:

      if (line2.startswith("*end")):

      current_section=4

      break

      continue

      if current_section==2:

      add_one_thread(line2)

      if current_section==3:

      add_one_method(line2)

      #Now handle the binary part

      mybinfile = open(sys.argv[1], "rb")

      alldata = mybinfile.read()

      mybinfile.close()

      pos=alldata.find("SLOW")

      offset,=struct.unpack("H",alldata[pos+6:pos+8])

      pos2=pos+offset #pos2 is where the record begin

      numofrecords = len(alldata) - pos2

      numofrecords = numofrecords / 9

      for i in xrange(numofrecords):

      add_one_record(alldata[pos2 + i * 9:pos2 + i * 9 + 9])

      my_stack=[0]

      for onerecord in all_records:

      thread_id=onerecord[0];

      method_id=onerecord[1];

      action=onerecord[2];

      time=onerecord[3];

      if(action==0):

      if(len(my_stack) > 1):

      parent_method_id=my_stack[-1]

      handle_one_call(parent_method_id,method_id)

      my_stack.append(method_id)

      else:

      if(action==1):

      if(len(my_stack) > 1):

      my_stack.pop()

      gen_dot_script_file()

      os.system("dot -Tjpg graph.dot -o output.jpg;rm -f graph.dot");

      #!/usr/bin/env python

      """

      turn the traceview data into a jpg pic, showing methods call relationship

      """

      import sys

      import os

      import struct

      import re

      #####################################################

      ######################## Global Variable ############

      #####################################################

      target_thread=1 #the thread that we want to track, filt out other threads

      #all_actions = ["enter","exit","exception","reserved"]

      all_threads = {}

      all_methods = {}

      all_records = []

      parent_methods = {}

      child_methods = {}

      method_calls = {}

      ######################################################

      ############################## Methods ###############

      ######################################################

      def add_one_thread(line):

      fields = line.split("/t")

      all_threads[int(fields[0],10)]=fields

      def add_one_method(line):

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>