当前位置: 网学 > 编程文档 > Android > 正文

DDMS出错

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: myeducs.cn 发布时间: 13/03/17

【网学网提醒】:网学会员为广大网友收集整理了,DDMS出错,希望对大家有所帮助!


    /*今天学习了用Eclipse来调试Android的代码,首次使用,可能有的问题很基本,有问题请指出,交流嘛:)*/
    (笔记中提到的Emulator也可以理解成Device)
    一、adb的介绍:
    adb(AndroidDebugBridge)包括三个部分:
    1)adbclient,运行在PC上(为DDMS,即IDE工作)
    2)adbdaemon(守护进程),运行于Emulator(为与Emulator中的VM交互工作);
    3)adbserver(服务进程),运行在PC(任务管理器上有),管理着adbclient和adbdaemon的通信.server与client通信的端口是是5037,
    adbserver会与emulator交互的,使用的端口有两个,一个是5554专门用于与Emulator实例的连接,那么数据可以从Emulator转发给IDE控制台了,另一个则是5555,专门与adbdaemon连接为后面调试使用。
    PS:Emulator/Device占用两个(一组)端口,一个为偶数的5554,一个奇数的5555。
    如果还开启其他的Emulator,则使用的另一组端口是5556,5557,一直到5585.
    adbserver开启时就是通过查找5555-5585之间端口来建立与模拟器的连接的,建立连接后就可以用adb的相关命令了。
    如果您安装了ADT就基本不需要adb的命令了(因为DDMS会调用ADB进行透明操作)
    关于本机的端口使用情况可以使用netstat[-a][-n]来查询验证一下。
    二、观察一组数据:
    1,在开启仿真器时有一些打印:
    [2009-06-0614:04:16-Helloworld]AndroidLaunch!
    [2009-06-0614:04:17-Helloworld]adbisrunningnormally.
    [2009-06-0614:04:17-Helloworld]Performingcom.android.hello.Helloworldactivitylaunch
    [2009-06-0614:04:17-Helloworld]AutomaticTargetMode:PreferredAVD'lab'isnotavailable.Launchingnewemulator.
    [2009-06-0614:04:17-Helloworld]LaunchinganewemulatorwithVirtualDevice'lab'
    [2009-06-0614:04:24-Helloworld]Newemulatorfound:emulator-5554
    [2009-06-0614:04:24-Helloworld]WaitingforHOME('android.process.acore')tobelaunched...
    [2009-06-0614:05:45-Helloworld]HOMEisupondevice'emulator-5554'
    [2009-06-0614:05:45-Helloworld]UploadingHelloworld.apkontodevice'emulator-5554'
    [2009-06-0614:05:45-Helloworld]InstallingHelloworld.apk...
    每一行都基本表示一个命令在执行,emulator-5554是仿真器的初始端口了。
    最后一句等于命令:adb-semulator-5554installhelloworld.apk
    如果报了类似以下的错误,那得(加个-r)重装,因为该App已经在该Emulator下运行了
    DDMdispatchregwaittimeout
    Can'tdispatchDDMchunk52454151:nohandlerdefined
    Can'tdispatchDDMchunk48454c4f:nohandlerdefined
    网上没有看到这个错误因此顺便提下解决方法:adb-semulator-5554install-rhelloworld.apk
    三,了解下DDMS:(都是adb的命令相当的功能)
    DDMS有几个界面:
    1)Devices:可以查看到当前运行的Emulator和其内运行的应用
    2)Emulatorcontrol,即仿真器的硬件设置项等:
    设置当前注册的网
    络状态(Home,Roaming,UnRegistered,Searching)
    数据业务的速度设置:有GSM,GPRS,EDGE,UMTS,HSDPA(3.5G?)
    还有载入KML或NMEA文件来模拟GPS数据
    3)还可以查询Threads,Heap,FileExplorer、重启adb,抓屏等,其他都是在调用adb。
    4)关于Logcat
    从Windows->Prereference->android->DDMS->LogginLevel进行设置打印等级,
    不过默认下只打印入口线程的信息,射频和Tapi的动作信息要通过adbLogcat-bradio打开,
    os-events相关的打印通过adblogcat-bevents.打开,
    Log默认被写入到手机的/data/anr/traces.txt文件中。
    四,Debug面板
    这个面板对于熟悉Eclipse的用户来说应该不用看了。
    通过以下三步将自己的应用或将已经跑起来的应用加入调试列表:
    1)选择Devices列表中Yourapp,
    2)选择臭虫按钮将该程序加载进调试状态
    3)OK,加断点吧。不过源代码要最新的否则断点不起作用。
    五、DDMS如何让IDE的调试工作起来呢?
    1)有几个组成:
    一个是adb(AndroidDebugBridge)参考第一部分,它起到调试桥的作用;
    另一类是运行在Device/Emulator端的adbdaemon,VM,debugger,yourApplicatioin,
    通过下面句话就可以理解它们的关系:
    一个App跑在一个进程中,这个进程又被一个VM绑定,都是一对一的,但VM与Emulator显然是多对一的,
    那调试时debugger从VM中拿到栈线程进程等信息,而daemon的作用仅仅是被DDMS用于建立一条连接(看下面)。
    最后一类则是运行在PC上的DDMSdebugger;
    这个debugger是IDE的调试器,你可以改成另一个调试器;
    DDMS是DalvikDebugMonitorService,负责建立调试的作用,它仅有两个Service,其他的功能都是通过ADBclient.让IDE与Emulator交互起来的。
    2)开启IDE时,DDMS会建立一个Devicemonitoringservice用于监控Emulator,因为可以开启多个Emulator嘛;
    如果找到一个Emulator,那么DDMS才会再开启另一个Service叫VMMonitoringSevice用于监控该Emulator下的VM;第一部分提到adb有三个部分,其中的adbclient可以多个实例的,DDMS的Service通过从ADBClient与ADbserver的交互结果来维护自身的数据。
    如果VMMonitor找到Emulator的一个VM,那么DDMS会利用ADB获取目标VM的进程ID,
    同时通过client与daemon建立起与vm的debugger的新连接,注意新连接的交互端口是从8600开始的(n个的话端口是8659+n),这条新连接可以让DDMS获得与VM的实际交互。
    剩下的就是DDMS把拿到的数据再扔给ide的debugger(它们之间默认通过8700端口,可更改,因为与VM的交互端口从8600开始使用的话可能会不够的),
    这样IDE的Debug视图就能正确工作了.
    
  • 上一篇资讯: Google Android下载资源
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号