• <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代碼(3)

    發表于:2011-08-26來源:CSDN作者:yiyaaixuexi點擊數: 標簽:
    fields = line.split(/t) all_methods[int(fields[0],16)]=fields def add_one_record(one): thread_id,=struct.unpack(B,one[:1]) if (thread_id == target_thread): tmp,=struct.unpack(L,one[1:5]) method_id= (t

      fields = line.split("/t")

      all_methods[int(fields[0],16)]=fields

      def add_one_record(one):

      thread_id,=struct.unpack("B",one[:1])

      if (thread_id == target_thread):

      tmp,=struct.unpack("L",one[1:5])

      method_id= (tmp / 4) * 4;

      method_action= tmp % 4;

      time_offset,=struct.unpack("L",one[5:])

      all_records.append([thread_id, method_id, method_action, time_offset])

      def handle_one_call(parent_method_id,method_id):

      if not (parent_methods.has_key(parent_method_id)):

      parent_methods[parent_method_id]=1

      if not (child_methods.has_key(method_id)):

      child_methods[method_id]=1

      if method_calls.has_key(parent_method_id):

      if method_calls[parent_method_id].has_key(method_id):

      method_calls[parent_method_id][method_id]+=1

      else:

      method_calls[parent_method_id][method_id]=1

      else:

      method_calls[parent_method_id]={}

      method_calls[parent_method_id][method_id]=1

      def gen_funcname(method_id):

      r1=re.compile(r'[/{1}lt;>]')

      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");

      修改,/t變為\t,/n變為\n。

      在計算器的源碼onCreate中添加

      view plaincopy to clipboardprint?

    原文轉自: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>