android调试工具DDMS的使用详解
具体可见http://developer.android.com/tools/debugging/ddms.html。DDMS为IDE和emultor、真正的android设备架起来了一座桥梁。开发人员可以通过DDMS看到目标机器上运行的进程/现成状态,可以android的屏幕到开发机上,可以看进程的heap信息,可以查看logcat信息,可以查看进程分配内存情况,可以像目标机发送短信以及打电话,可以像android开发发送地理位置信息。可以像gdb一样attach某一个进程调试。SDKtools目录下提供了ddms的完整版,直接运行即可。下面以Eclipse的DDMSperspective为例简单介绍DDMS的功能。
跟debug,java的perspective一样,安装好adt后会有一个DDMS得perspective,打开即可。
打开后的窗口为,
device窗口罗列模拟器中所有的进程,右上角那一排按钮分别为:调试某个进程,更新某个进程,更新进程堆栈信息,停止某个进程,最后一个图片按钮时抓取android目前的屏幕。
当你选中某个进程,并按下调试进程按钮时,如果eclipse中有这个进程的代码,那就可以进行源代码级别的调试。有点像gdbattach。图片抓取按钮可以把当前android的显示桌面抓到你的机器上,也是非常有用。
右边那个窗口中有threads,heap,fileexplorer选项卡。分别显示线程统计信息,栈信息,以及android的文件系统。
fileexplorer非常有用,他可以把文件上传到android手机,或者从手机下载下来,也可以进行删除操作。选中fileexplorer选项卡后,按下面三个按钮便可实现对android手机文件系统的上传,下载,删除操作。
emulatorcontrol也是非常重要的,通过它可以像手机发送短信,打电话,已经更新手机位置信息。
总结:
eclipseadt目前提供的的ddms功能只是真正ddms的一小部分,你可以直接使用tools下面的ddms来使用所有功能。其中有一个查看进程内存分配的功能比较有用。
DDMS全称:DalvikDebugMonitorService
一,DDMS的作用它提供截屏,查看线程和堆的信息,logcat,进程,广播状态信息,模拟来电呼叫和短信,虚拟地理坐标等等。
二,DDMS怎样工作1,每一个Android应用都运行在一个Dalvik虚拟机实例里,而每一个虚拟机实例都是一个独立的进程空间。虚拟机的线程机制,内存分配和管理,Mutex等等都是依赖底层操作系统而实现的。所有Android应用的线程都对应一个Linux线程,虚拟机因而可以更多的依赖操作系统的线程调度和管理机制。
2,DDMS在IDE与设备或模拟器之间的起着中间人的角色。
3,DDMS启动时会与ADB之间建立一个devicemonitoringservice用于监控设备。当设备断开或链接时,这个service就会通知DDMS。
4,当一个设备链接上时,DDSM和ADB之间又会建立VMmonitoringservice用于监控设备上的虚拟机。
5,通过ADBDeamon与设备上的虚拟机的debugger建立链接,这样DDMS就开始与虚拟机对话了。
三,端口1,对于设备上每个虚拟机的debugger,DDMS都会开启一个监听端口。端口从8600开始。
2,8700端口
四,左边面板1,左边显示了所有当前能找到的所有模拟器或设备列表和每个设备当前正在运行的虚拟机列表。虚拟机是按程序的包命来显示的。
2,通过这些列表可以找到运行着想调试的activity的虚拟机。每个虚拟机旁边的是“debuggerpass-through”端口,链接到其中一个端口就会链接到设备上对应的虚拟机。不管如何,在用DDMS时,只需要链接到8700端口,因为DDSM转发所有的通信到当前选择的虚拟机。这样,就不用在每次切换虚拟机是重新配置debugger端口。
3,当一个正在运行的程序调用waitForDebugger()函数时,客户端名字旁边会显示一个红色的icon,知道debugger连上对应的虚拟机,这是debugger会变成绿色。
4,如果看到叉icon,着意味着DDMS用于不能打开虚拟机的端口而不能建立debugger与虚拟机建立连接。如果看到所有的虚拟机是这样,很可能是有另外一个DDSM实例在运行。
五,右边面板1,info
这里显示关于选中的VM的一般的信息,包括进程ID,包名,和虚拟机版本。
2,Threads
线程视图列出了此进程的所有线程。
ID:虚拟机分配的唯一的线程ID,在Dalvik里,它们是从3开始的奇数。
Tid:linux的线程ID,Forthemainthreadinaprocess,thiswillmatchtheprocessID.
Stauts:线程状态,
running:正在执行程序代码
sleeping:执行了Thread.sleep()
monitor:等待接受一个监听锁。
wait:Object.wait()
native:正在执行native代码
vmwait:等待虚拟机
zombie:线程在垂死的进程
init:线程在初始化(我们不可能看到)
starting:线程正在启动(我们不可能看到)
utime:执行用户代码的累计时间
stime:执行系统代码的累计时间
name:线程的名字
4,VMHeap
展示一些堆的状态,在垃圾回收其间更新。当选定一个虚拟机时,VMHeap视图不能显示数据,可以点击右边面包上的带有绿色的”Showheapupdates”按钮,然后在点击”CauseGC“实施垃圾回收更新堆的状态。
6,AllocationTracker
在这个视图里,我们可以跟踪每个选中的虚拟机的内存分配情况。点击”StartTracking”后点击”GetAllocations“就可以看到。
7,EmulatorControl
在这里,可以模拟一些设备状态和行为。
TelephonyStatus:改变电话语音和数据方案的状态,模拟不同的网络速度。
TelePhonyActions:发送模拟的电话呼叫和短信到模拟器。
LocationControls:发送虚拟的定位数据到模拟器里,我们就可以执行定位之类的操作。可以收工的在Manual里输入经度纬度发送到模拟器,也可以通过GPX和KML文件。
六,其他1,FileExplorer
通过Device>FileExplorer就打开FileExplorer。这里可以浏览文件,上传上载删除文件,当然这是有相应权限限制的。
2,ScreenCapture
通过Device>ScreenCapture就可以截图。
3,ExploringProcesses
通过Device >Showprocessstatus,这里的信息是通过shell命令”ps-x”输出的。
4,ExamineRadioState
通过Device>Dumpradio,检测广播状态。
5,StopaVirtualMachine
通过Actions>HaltVM,停止一个虚拟机。
相关文章
- android 浏览器 开发,Android 浏览器的开发实例分享
- android 混淆不起作用,Android代码混淆的写法总结
- Android代码混淆及调试错误「建议收藏」
- android开发笔记之 Android代码混淆打包
- mac 电脑android环境变量设置,mac上Android环境变量配置[通俗易懂]
- Android中的shell循环命令
- android 4怎么打开usb调试?「建议收藏」
- mac是基于什么内核的操作系统_mac编译android源码
- 【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)
- 【Android 性能优化】布局渲染优化 ( 过渡绘制 | 自定义控件过渡绘制 | 布局文件层次深 | GPU 过渡绘制调试工具 | 背景过度绘制 )
- 【Android 逆向】ptrace 函数 ( ptrace 函数族 | 进程附着 | 进程脱离 | 进程数据读写权限 | 进程对应的主线程寄存器读写 | 单步调试 |ptrace 函数族状态转换 )
- 【Android 逆向】Android 进程注入工具开发 ( 调试进程中寄存器的作用 | 通过 EIP 寄存器控制程序运行 | EIP 寄存器的存档与恢复 )
- 【Android 逆向】Android 进程注入工具开发 ( 编译注入工具 | 编译结果文件说明 | 注入过程说明 )
- 【Android 逆向】ART 脱壳 ( InMemoryDexClassLoader 脱壳 | 加固厂商在 ART 下使用的两种类加载器 | InMemoryDexClassLoader 源码 )
- 【Android Gradle 插件】Module 目录下 build.gradle 配置文件 ( android 闭包块配置 | AppExtension 扩展类型参考文档 )
- 【ijkplayer】编译 Android 版本的 ijkplayer ⑤ ( 执行 init-android-libyuv.sh | 执行 init-android-soundtouch.sh )
- 【Android UI】Path 测量 PathMeasure ⑤ ( PathMeasure#getSegment 函数 | 圆形进度条示例 )
- Android控制文字水平间距android:letterSpacing详解手机开发
- Android中解析JSON格式数据常见方法合集详解编程语言