iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >使用traceview和dmtracedump调试Android代码
  • 483
分享到

使用traceview和dmtracedump调试Android代码

Android 2022-06-06 12:06:40 483人浏览 八月长安
摘要

 使用traceview和dmtracedump调试Android代码   ✿Android 程序调试工具   Google为我们提供的代码调试工具的

 使用traceview和dmtracedump调试Android代码 

 ✿Android 程序调试工具

  Google为我们提供的代码调试工具的亮点:traceview 和 dmtracedump 。有了这两个工具,我们调试程序分析bug非常得心应手了。traceview帮助我们分析程序性能,dmtracedump生成函数调用图。遗憾的是,google提供的dmtracedump是个失败的工具,并不能绘图,本文会详细介绍解决方案,实现绘图。

  ✿生成.trace文件

  android.os.Debug类,其中重要的两个方法Debug.startMethodTracing()和Debug.stopMethodTracing()。这两个方法用来创建.trace文件,将从Debug.startMethodTracing()开始,到Debug.stopMethodTracing()结束,期间所有的调用过程保存在.trace文件中,包括调用的函数名称和执行的时间等信息。

  把下面代码分别在加在调试起始代码的位置,和终止位置。

  Debug.startMethodTracing(“test”);

  Debug.stopMethodTracing();

  Debug.startMethodTracing(“test”);

  Debug.stopMethodTracing();

  其中参数test是要创建的trace文件的名称,test.trace。默认路径是/sdcard/test.trace,也可以自己制定/data/log/test,表示文件在/data/log/test.trace。

  ✿traceview

  在SDK中执行 :

  ./traceview test.trace

  我们可以得到

  1.程序中每个线程调用方法的启动和停止时间

  2.函数执行的信息和效率分析

  ✿dmtracedump

  dmtracedump原本的用意是将整个调用过程和时间分析结合,以函数调用图的形式表现出来。可是google这个项目一直处于broken状态,迟迟不能得到完善。现在的dmtracdump只有-o选项可以使用,在终端上列出函数调用信息,和traceview功能相似,如果执行./dmtracedump –g test.png test.trace会卡住不动。

  起初我以为是test.trace文件的问题,对文件的结束符稍作修改,画出了一副雷人的图片:

  后来,搜到了网络上有牛人提供了dmtracedump的替代,是一个python脚本,借助dot来绘制矢量图。Python脚本一定要注意对齐格式,对齐缩进是他的逻辑结构。

  view plaincopy to clipboardprint?

  #!/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):

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


--结束END--

本文标题: 使用traceview和dmtracedump调试Android代码

本文链接: https://www.lsjlt.com/news/28685.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何使用PySnooper调试代码
    本篇内容介绍了“如何使用PySnooper调试代码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 快速安装执行下面这些命令进行安装 Py...
    99+
    2023-06-15
  • 如何使用VS代码调试
    小编给大家分享一下如何使用VS代码调试,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Visual Studio 2005中,给程序员提供了十分强大和便捷的VS代码...
    99+
    2023-06-17
  • 如何使用Vim编写和调试Python代码
    如何使用Vim编写和调试Python代码 要想在Ubuntu下使用VIM编写和调试Python代码,请下安装如下的链接进行配置: https://segmentfault.com/a/1190000003962806   ...
    99+
    2023-01-31
    如何使用 代码 Vim
  • python怎么使用pdb调试代码
    小编给大家分享一下python怎么使用pdb调试代码,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!使用pdb调试代码Python有自己的内置调试器-pdb。调试器...
    99+
    2023-06-27
  • 如何使用 PHP 函数调试代码
    php 调试函数概述:var_dump(): 显示变量的详细表示。print_r(): 输出更简洁的变量表示。xdebug: 提供高级调试功能,如设置断点和查看堆栈跟踪。 如何使用 P...
    99+
    2024-04-12
    php 调试代码
  • 如何调试和测试SQL拼接代码
    调试和测试SQL拼接代码的步骤如下: 使用日志输出:在拼接SQL语句的过程中,可以使用日志输出来打印拼接的结果,以便查看拼接是否...
    99+
    2024-04-29
    SQL
  • C++技术中的调试:使用调试器探索代码内部
    使用 c++++ 调试器调试代码包括以下步骤:设置断点以暂停代码执行。开始调试以进入调试模式。单步执行代码以按行检查其执行。检查变量值或在立即窗口中评估表达式。通过这些技术,开发人员可以...
    99+
    2024-05-07
    调试 c++
  • VScode如何运行和调试代码
    本文小编为大家详细介绍“VScode如何运行和调试代码”,内容详细,步骤清晰,细节处理妥当,希望这篇“VScode如何运行和调试代码”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。运行环境:VSCode 1.68....
    99+
    2023-07-04
  • 如何使用pdb进行python代码调试
    这篇文章主要讲解了“如何使用pdb进行python代码调试”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用pdb进行python代码调试”吧!pdb为python程序实现了一个交互式调...
    99+
    2023-06-27
  • Pycharm远程调试服务器代码(使用P
    准备工作 1.随便准备一个项目工程,在本地用Pipenv创建一个虚拟环境并生成Pipfile和pipfile.lock文件,如下: 2.准备一台服务器,我这里使用阿里云的ECS SSH连接上 $ ssh root@ip Pycharm同...
    99+
    2023-01-31
    代码 服务器 Pycharm
  • 怎么调试Cordova应用的JavaScript代码和自定义插件代码
    这篇文章主要讲解了“怎么调试Cordova应用的JavaScript代码和自定义插件代码”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么调试Cordova应用的JavaScript代码和自...
    99+
    2023-06-05
  • 使用goland调试远程代码的操作步骤
    前言 很多时候我们都在window上使用goland,并直接使用goland调试go代码。 但是很多时候我们的程序运行在Linux服务器上,虽然可以通过dlv命令行进行手动打断点调试...
    99+
    2024-04-02
  • 使用源链接对ASP.NETCore源代码进行调试
    在Visual Studio 2017中可以通过符号以及源链接,非常方便对 ASP.NET Core 2.0中源代码进行调试。在这篇文章中,我们将重点介绍如何使用源链接对ASP.NE...
    99+
    2024-04-02
  • PHP怎么使用psysh调试代码片段工具
    小编给大家分享一下PHP怎么使用psysh调试代码片段工具,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!PsySH是一个PHP的运行时开发平台,交互式调试器和Re...
    99+
    2023-06-20
  • 在VSCode里怎么使用Jupyter Notebook调试Java代码
    本篇内容介绍了“在VSCode里怎么使用Jupyter Notebook调试Java代码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所...
    99+
    2023-07-02
  • Linux 上的 Go 编程:如何调试和测试代码?
    Go 是一种强大的编程语言,它的出现为开发者们提供了更快,更可靠的编程体验。然而,即使是最好的编程语言也会有一些问题,因此在编写 Go 代码时,调试和测试是必不可少的。在本文中,我们将深入探讨如何在 Linux 上调试和测试 Go 代码。...
    99+
    2023-07-10
    教程 linux 关键字
  • 怎么用VSCode调试React Vue代码
    这篇文章主要介绍了怎么用VSCode调试React Vue代码的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用VSCode调试React Vue代码文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-07-02
  • 调试JavaScript代码如何打印调用堆栈
    小编给大家分享一下调试JavaScript代码如何打印调用堆栈,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!打印调用堆栈可以通过调试面板查看当前代码的调用堆栈,也...
    99+
    2023-06-27
  • Python编程不要再使用print调试代码了
    目录1. 快速安装2. 简单案例3. 详细使用3.1 重定向到日志文件3.2 跟踪非局部变量值3.3 设置跟踪函数的深度3.4 设置调试日志的前缀3.5 设置最大的输出长度3.6 支...
    99+
    2024-04-02
  • 使用debugger来调试代码的原因是什么
    这篇文章主要介绍了使用debugger来调试代码的原因是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇使用debugger来调试代码的原因是什么文章都会有所收获,下面我们一起来看看吧。console.log...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作