目录(?)[-]

  1. Debug视图
  2. DDMS视图
    1. 查看应用运行状态
    2. 进入debug状态
    3. HPROF
    4. Thread信息
    5. Method信息
    6. Stop
    7. 截图
    8. UI层次架构信息
    9. 其它的
    10. Tab中提供的功能

我们将基于Eclipse了解如何对应用进行调试,即debug。Android插件提供的DDMS可以给予很多帮助,包括视图(那个设备被连接),模拟器控制(发送电话呼叫,SMS短信,GPS信息),文件浏览器(查看/传输设备上的文件),thread,heap和allocation跟踪器。

在一个真实设备调测应用,除了将设备设置为USB调测模式,还需要在AndroidManifest.xml的application下设置android:debuggable="true",但这并不需要人工去设置,当从Eclipse直接部署设备或模拟器是,自动设置为true,如果是产品的发布版本,ADT自动设为false。

Debug视图

对于Eclipse,本身就提供debug功能,支持断点设置,可以查看参数值等等,这些都是常规的使用。

DDMS视图

DDMS即Dalvik Debug Monitor Server。如下图所示,可以用于查看应用的运行情况,如线程、存储以及其他统计数据。

查看应用运行状态

点击“Cause GC”将开始手机信息,并随着程序运行增加新的信息。如果在Heap的Tab中发现提示“DDMS Heap updates are NOT ENABLED for this client”,则在下面配置中将相关的开关(Thread updates enabled by default)。关于DDMS使用过程中出现问题,可以参考:http://www.developer.com/ws/android/development-tools/android-ddms-views-tutorial.html

我们可以监控设备上的应用,即时没有源代码,当然对于在真实设备上的释放版本应用,需要将AndroidManiefest.xml中将android:debuggable设置为true。

进入debug状态

在左上角有一个绿色图标,点击可在运行的过程中进入debug状态,也就是之前介绍Debug视图,可以进行断点检查。

HPROF

HPROF是dump a heap and CPU Profiling Agent,可用于查看内存泄漏。如下图,可以用文件保持下来,通过MAT插件打开。

Thread信息

查看选定应用的thread信息如下:

Method信息

在“Update Thread”按钮旁边是“Method profiling”按钮,这是个开关按就,有start和stop两个状态,用于收集应用中methord的信息。我们start它,然后stop它,就出现了TraceView,如下图所示,在右边的trace view中显示详细信息,资源使用的情况,执行的时间等,我们可以据此分析性能瓶颈。

在这里我们可以看到所有方法的信息。我们也可以在代码中使用android.os.Debug类选择要跟踪的代码,如下所示,Android会在设备的SD卡上创建一个basename.trace的文件,该文件可以在SDK/tools的traceview中查看。

Debug.startMethodTracing( "basename" ); 
      ... 要跟踪的代码 ...
Debug.stopMethodTracing();

Stop

接着旁边是“stop”按钮,将关闭该应用进程。返回键只影响activity,而DDMS上Stop是关闭整个应用。

截图

接着旁边,照相机图标是“Screen Capture”按钮,可以在此考屏。

UI层次架构信息

再旁边是UI层次结构,可以清晰看到UI层次结构,如下:

其它的

再过去,就是下来菜单,如下。当中Reset adb可以帮助我们同步设备,相当于命令行中的adb kill-server和adb start-server。

Tab中提供的功能

在右边的tab中,提供各类的跟踪和设置。Allocation Tracker可以跟踪内存分配,点击还可以获得具体有哪个方法,代码中的哪一行触发。File Exploer运行我们与设备/模拟器之间进行文件传递。而Emulator Control是较为常用的功能,可以模拟来电、短信和GPS位置信息。这些在未来的学习中都会用到。

相关链接: 我的Android开发相关文章

【转】Pro Android学习笔记(五三):调试和分析(1):Debug视图和DDMS视图的更多相关文章

  1. 【转】Pro Android学习笔记(三十):Menu(1):了解Menu

    目录(?)[-] 创建Menu MenuItem的属性itemId MenuItem的属性groupId MenuItem的属性orderId MenuItem的属性可选属性 Menu触发 onOpt ...

  2. 【转】Pro Android学习笔记(三):了解Android资源(上)

    在Android开发中,资源包括文件或者值,它们和执行应用捆绑,无需在源代码中写死,因此我们可以改变或替换他们,而无需对应用重新编译. 了解资源构成 参考阅读Android学习笔记(三八):资源res ...

  3. 【转】 Pro Android学习笔记(三二):Menu(3):Context菜单

    目录(?)[-] 什么是Context menu 注册View带有Context menu 填Context菜单内容 Context菜单点击触发 什么是Context menu 在桌面电脑,我们都很熟 ...

  4. 【转】 Pro Android学习笔记(三三):Menu(4):Alternative菜单

    目录(?)[-] 什么是Alternative menu替代菜单 小例子说明 Alternative menu代码 关于Category和规范代码写法 关于flags 多个匹配的itemId等参数 什 ...

  5. 【转】 Pro Android学习笔记(五五):调试和分析(3):adb命令、模拟器控制台和StrictMode

    目录(?)[-] adb命令 模拟器Console StrictMode adb命令 我们在学习SQLite的使用,介绍过部分adb命令的使用,见Pro Android学习笔记(五):了解Conten ...

  6. 【转】 Pro Android学习笔记(五六):配置变化

    目录(?)[-] Activity的destorycreate过程 Fragment的destorycreate过程 onSaveInstanceState saveFragmentInstanceS ...

  7. 【转】 Pro Android学习笔记(五二):ActionBar(5):list模式

    可以在action bar中加入spinner的下来菜单,有关spinner,可以参考Pro Android学习笔记(二十):用户界面和控制(8):GridView和Spinner. list的样式和 ...

  8. 【转】Pro Android学习笔记(二五):用户界面和控制(13):LinearLayout和TableLayout

    目录(?)[-] 布局Layout 线性布局LinearLayout 表格布局TableLayout 布局Layout Layout是容器,用于对所包含的view进行布局.layout是view的子类 ...

  9. 【转】 Pro Android学习笔记(七四):HTTP服务(8):使用后台线程AsyncTask

    目录(?)[-] 5秒超时异常 AsyncTask 实现AsyncTask抽象类 对AsyncTask的调用 在哪里运行 其他重要method 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注 ...

  10. 【转】 Pro Android学习笔记(六七):HTTP服务(1):HTTP GET

    目录(?)[-] HTTP GET小例子 简单小例子 出现异常NetworkOnMainThreadException 通过StrictMode进行处理 URL带键值对 Andriod应用可利用ser ...

随机推荐

  1. 几则js表达式

    过滤大段文本里的标签.标签格式 <...>,如下匹配标签然后替换成空 校验邮箱是否符合: 去掉行首行尾空格: 检测字符串是否包含中文:(utf8编码)

  2. Python中为什么要使用线程池?如何使用线程池?

    系统处理任务时,需要为每个请求创建和销毁对象.当有大量并发任务需要处理时,再使用传统的多线程就会造成大量的资源创建销毁导致服务器效率的下降.这时候,线程池就派上用场了.线程池技术为线程创建.销毁的开销 ...

  3. MD_STOCK_REQUIREMENTS_LIST_API 取MD04的MRP Element

    [转http://lz357502668.blog.163.com/blog/static/16496743201231941718527/]?MD_STOCK_REQUIREMENTS_LIST_A ...

  4. 使用django开发一个博客

    环境: MAC 10.10.5  Yosemite Python 3.73 Django 代码托管 github

  5. python实例1:创建一个登陆模块

    实现功能: 1.用户输入账户密码 2.验证账户是否存在于黑名单,如果存在于黑名单,则执行1,否则往下执行 3.验证用户名和密码. 3.1.如果验证成功,则打印欢迎信息并退出程序: 3.2.如果用户名存 ...

  6. PAT 天梯赛 【】 L3-015. 球队“食物链” 【BFS+剪枝】

    题目链接 https://www.patest.cn/contests/gplt/L3-015 思路 用一个 数组标记 胜负 每次输入一行字符串 然后遍历 如果 碰到 W 那么 vis[i][j] = ...

  7. PAT天梯赛 L2-019. 悄悄关注 【STL】

    题目链接 https://www.patest.cn/contests/gplt/L2-019 思路 将已关注的人 用 MAP存起来 然后将点赞的用户中 没有关注的 用 VECTOR 存下来 并且求出 ...

  8. 每天一个Linux命令(21)find命令_xargs参数

    xargs 与 exec 的作用类似,但是xargs与find 一起使用时,一般配合管道一起使用. 前面的输出转换为后方指令的参数输入,使用exec和xargs可以使用户对所匹配到的文件执行几乎所有的 ...

  9. 【Flask】SelectedField 同步数据库

    ## 如果不加入__init__函数会导致,SelectedField表单生成只有里面的内容不会和数据库同步(即数据库添加,删除字段时表单中数据项和初始化时一致.下一次重启app是才会同步) clas ...

  10. Unity Json解析IPA

    今天看到一个unity 自带的解析json的IPA,感觉比litjson好用很多,废话不多,上代码 using System.Collections; using System.Collections ...