`
ejacky
  • 浏览: 32112 次
  • 性别: Icon_minigender_1
  • 来自: 抚顺
社区版块
存档分类
最新评论

Android的调试原理--学习笔记

阅读更多
Android的调试原理--学习笔记

/* 今天学习了用Eclipse 来调试Android的代码,首次使用,可能有的问题很基本,有问题请指出,交流嘛:) */
(笔记中提到的Emulator也可以理解成Device)
一、adb的介绍:
adb(Android Debug Bridge)包括三个部分:
1)adb client, 运行在PC上(为DDMS,即IDE工作)
2)adb daemon(守护进程), 运行于Emulator(为与Emulator中的VM交互工作);
3)adb server(服务进程), 运行在PC(任务管理器上有),管理着adb client和adb daemon的通信.server与client通信的端口是是5037,
adb server会与emulator交互的,使用的端口有两个,一个是5554专门用于与Emulator实例的连接,那么数据可以从Emulator转发给IDE控制台了,另一个则是5555,专门与adb daemon连接为后面调试使用。

PS:Emulator/Device占用两个(一组)端口,一个为偶数的5554,一个奇数的5555。
如果还开启其他的Emulator,则使用的另一组端口是5556,5557,一直到5585.
adb server开启时就是通过查找5555-5585之间端口来建立与模拟器的连接的,建立连接后就可以用adb的相关命令了。
如果您安装了ADT就基本不需要adb的命令了(因为DDMS会调用ADB进行透明操作)

关于本机的端口使用情况可以使用netstat [-a] [-n]来查询验证一下。

二、观察一组数据:
1,在开启仿真器时有一些打印:
[2009-06-06 14:04:16 - Helloworld] Android Launch!
[2009-06-06 14:04:17 - Helloworld] adb is running normally.
[2009-06-06 14:04:17 - Helloworld] Performing com.android.hello.Helloworld activity launch
[2009-06-06 14:04:17 - Helloworld] Automatic Target Mode: Preferred AVD 'lab' is not available. Launching new emulator.
[2009-06-06 14:04:17 - Helloworld] Launching a new emulator with Virtual Device 'lab'
[2009-06-06 14:04:24 - Helloworld] New emulator found: emulator-5554
[2009-06-06 14:04:24 - Helloworld] Waiting for HOME ('android.process.acore') to be launched...
[2009-06-06 14:05:45 - Helloworld] HOME is up on device 'emulator-5554'
[2009-06-06 14:05:45 - Helloworld] Uploading Helloworld.apk onto device 'emulator-5554'
[2009-06-06 14:05:45 - Helloworld] Installing Helloworld.apk...
每一行都基本表示一个命令在执行,emulator-5554是仿真器的初始端口了。
最后一句等于命令:adb -s emulator-5554 install helloworld.apk
如果报了类似以下的错误,那得(加个-r)重装,因为该App已经在该Emulator下运行了
DDM dispatch reg wait timeout
Can't dispatch DDM chunk 52454151: no handler defined
Can't dispatch DDM chunk 48454c4f: no handler defined
网上没有看到这个错误因此顺便提下解决方法:adb -s emulator-5554 install -r helloworld.apk

三,了解下DDMS:(都是adb的命令相当的功能)
DDMS有几个界面:
1)Devices:可以查看到当前运行的Emulator和其内运行的应用
2)Emulator control,即仿真器的硬件设置项等:
   设置当前注册的网络状态(Home,Roaming,UnRegistered,Searching)
   数据业务的速度设置:有GSM,GPRS,EDGE,UMTS,HSDPA(3.5G?)
   还有载入KML或NMEA文件来模拟GPS数据
3)还可以查询Threads,Heap,File Explorer、重启adb,抓屏等,其他都是在调用adb。

4)关于Logcat
从Windows->Prereference->android->DDMS->Loggin Level进行设置打印等级,
不过默认下只打印入口线程的信息,射频和Tapi的动作信息要通过adb Logcat -b radio打开,
os-events相关的打印通过adb logcat -b events.打开,
Log默认被写入到手机的/data/anr/traces.txt文件中。

四,Debug面板
这个面板对于熟悉Eclipse的用户来说应该不用看了。
通过以下三步将自己的应用或将已经跑起来的应用加入调试列表:
1)选择Devices列表中Your app,
2)选择臭虫按钮将该程序加载进调试状态
3)OK,加断点吧。不过源代码要最新的否则断点不起作用。

五、DDMS如何让IDE的调试工作起来呢?
1)有几个组成:
一个是adb(Android Debug Bridge)参考第一部分,它起到调试桥的作用;

另一类是运行在Device/Emulator端的adb daemon, VM, debugger, your Applicatioin,
通过下面句话就可以理解它们的关系:
一个App跑在一个进程中,这个进程又被一个VM绑定,都是一对一的,但VM与Emulator显然是多对一的,
那调试时debugger从VM中拿到栈线程进程等信息,而daemon的作用仅仅是被DDMS用于建立一条连接(看下面)。

最后一类则是运行在PC上的DDMS debugger;
这个debugger是IDE的调试器,你可以改成另一个调试器;
DDMS是Dalvik Debug Monitor Service,负责建立调试的作用,它仅有两个Service,其他的功能都是通过ADB client.让IDE与Emulator交互起来的。

2)开启IDE时,DDMS会建立一个Device monitoring service用于监控Emulator,因为可以开启多个Emulator嘛;
如果找到一个Emulator,那么DDMS才会再开启另一个Service叫VM Monitoring Sevice用于监控该Emulator下的VM; 第一部分提到adb有三个部分,其中的adb client可以多个实例的,DDMS的Service通过从ADB Client与ADb server的交互结果来维护自身的数据。

如果VM Monitor找到Emulator的一个VM,那么DDMS会利用ADB获取目标VM的进程ID,
同时通过client与daemon建立起与vm的debugger的新连接,注意新连接的交互端口是从8600开始的(n个的话端口是8659+n),这条新连接可以让DDMS获得与VM的实际交互。

剩下的就是DDMS把拿到的数据再扔给ide 的 debugger(它们之间默认通过8700端口,可更改,因为与VM的交互端口从8600开始使用的话可能会不够的),
这样IDE的Debug视图就能正确工作了.

转自:http://hi.baidu.com/chocolly/blog/item/91d68f99210abc006f068c63.html
分享到:
评论

相关推荐

    android学习笔记最新版(1-4)

    《Android学习笔记最新版(1-4)》是一份针对初学者精心编撰的教程,旨在帮助新手快速掌握Android开发的基础知识。这份笔记涵盖了从环境搭建到应用开发的全过程,内容丰富,深入浅出,是Android学习者的理想参考资料...

    android课程笔记

    ### Android 开发课程笔记知识点详解 #### 一、Android架构概览 1. **Android系统架构**:...通过学习这些基础知识,开发者可以更好地理解Android应用程序的工作原理,并能够快速上手开发出自己的Android应用。

    Android课程实验-线性布局实验-限制布局实验-表格布局实验-自制的浏览器.zip

    通过这些实验,学生不仅能够学习到Android应用的基本构建块,还能了解Android开发环境的使用,如Android Studio IDE,以及XML布局文件的编写和调试技巧。这些实验有助于巩固理论知识,提高实际编程能力,为今后的...

    黑马程序员Android学习笔记

    《黑马程序员Android学习笔记》是一份专为初学者设计的详尽教程,旨在帮助那些希望踏入安卓开发领域的人员快速掌握核心知识。这份笔记涵盖了从基础到进阶的多个主题,帮助学习者系统地理解Android应用开发的过程。 ...

    安卓课程设计----基于Android Studio开发的笔记APP.zip

    "安卓课程设计----基于Android Studio开发的笔记APP.zip" 是一个与安卓应用开发相关的项目,其中包含了使用Android Studio开发的一款笔记应用程序的完整源代码和可能的项目报告。这个项目可能是针对学生或者对安卓...

    Android+学习笔记

    Android学习笔记概述 Android开发是当今移动应用领域中极为重要的一部分,它是一个开源的操作系统,主要应用于智能手机、平板电脑以及智能电视等设备。本学习笔记旨在为初学者提供一个全面而深入的Android入门指南...

    Android学习笔记.rar

    这份“Android学习笔记”涵盖了从基础到进阶的Android开发知识,旨在帮助开发者深入理解Android系统,并具备开发高质量Android应用的能力。 一、Android系统架构 Android系统分为四个主要层次:Linux内核、系统库和...

    Android学习笔记之开发环境搭建(Eclipse和NetBeans)

    【Android学习笔记之开发环境搭建(Eclipse和NetBeans)】 Android开发对于初学者来说,第一步通常是搭建开发环境。本文将详细介绍如何在Eclipse和NetBeans中设置Android开发环境,以便进行应用程序的编写和调试。 ...

    android 学习笔记整理

    这份"android 学习笔记整理"包含了作者在学习Android时积累的详尽资料,旨在为初学者提供一个系统化的学习路径和参考资料。 首先,Android是一种开源的操作系统,主要用于移动设备,如智能手机和平板电脑。其核心...

    android学习笔记1

    "Android学习笔记1"这个压缩包文件很可能是开发者在实践中积累的经验和代码示例的集合,对于初学者和有经验的开发者来说,都是宝贵的资源。这里,我们将深入探讨Android开发的一些关键概念和技术。 首先,Android是...

    Android开发必备资料之50例源码

    安卓(android)编程入门开发教程笔记 - **资源简介**:这是一套入门级的教程,通过实际操作引导新手学习Android开发的基本步骤。 - **适用人群**:适合零基础的学习者。 - **学习要点**: - Android Studio使用 - ...

    新版Android开发教程+笔记5--模拟器、应用1、2

    ### 新版Android开发教程+笔记5 -- 模拟器、应用1、2 #### Android模拟器详解 在Android开发过程中,模拟器是一个重要的工具,它能够帮助开发者在没有实际硬件的情况下进行应用程序的测试和调试。本文将根据提供的...

    uni-app学习笔记

    【uni-app学习笔记】 uni-app 是一个由ECharts团队开发的多端开发框架,它允许开发者使用一套代码来构建iOS、Android、H5、微信小程序、支付宝小程序等多个平台的应用。这个框架基于Vue.js,提供了丰富的组件和API...

    android开发板笔记6

    通过深入学习这些知识点,并结合提供的“read me.doc”、“新版Android开发教程+笔记十一--可视化UI设计DroidDraw.pdf”和“新版Android开发教程+笔记十二--文件存取、数据库编程.pdf”等资源,开发者可以迅速提升在...

    Android学习笔记 Preference的使用

    这篇名为“Android学习笔记 - Preference的使用”的博客文章可能涵盖了以下关键知识点: 1. **Preference基础知识**: - `Preference` 类是Android中的一个抽象类,它是所有设置项的基础。`CheckBoxPreference`、`...

    android学习笔记与开发教程4

    总结来说,“android学习笔记与开发教程4”主要涵盖了Dalvik虚拟机的工作原理和优势,以及ADB在Android开发中的核心作用。理解这些概念和技术,将有助于你更深入地了解Android系统,并提升开发和调试能力。无论是...

    android 我的笔记 源码

    【Android 源码分析与学习笔记】 在深入探索 Android 开发的过程中,源码阅读是提升技术水平的关键步骤。Android 源码包含了操作系统层面、框架层以及应用开发接口等各个层次的实现细节,有助于开发者理解系统行为...

    新版Android开发教程&笔记2--基础入门二

    "新版Android开发教程&笔记2--基础入门二"聚焦于为开发者提供最新的Android开发知识,帮助初学者迅速掌握Android应用开发的基本概念和技术。这篇教程可能涵盖了以下几个核心知识点: 1. **Android Studio入门**:...

    Android学习入门笔记.zip

    Android学习入门笔记主要涵盖了一系列关于Android开发的基础知识,旨在帮助初学者快速掌握这一全球最流行的移动操作系统之一的编程技能。以下是一些核心知识点的详细解释: 1. **Android概述**: - Android是由...

    android 学习心得

    ### 五、Android调试工具及方法 - **LogCat**:Android的日志查看工具,用于查看应用程序的日志输出。 - **DDMS**:Dalvik Debug Monitor Service,是一个集成在Eclipse ADT中的调试工具,提供了对设备或模拟器上的...

Global site tag (gtag.js) - Google Analytics