Android eclipse中程序调试
一:断点调试
用eclipse开发android程序的时,跟VS一样是可以断点单步调试的.
步骤如下.
1 设置断点:在编码窗体的左边框上用鼠标双击,或者右键点击菜单,选择 Toggle Breakpoint菜单项即可.
2 在debug模式下运行程序进入调试状态:通过点击工具栏上的小虫按钮或者是在项目右键点击然后选择Debug As,Android Application菜单,启动程序的调试模式.
第一次运行调试模式eclipse会弹出如下确认窗口
当程序运行到你的断点地方时就会停下,这时可以按照下面的功能键按需求进行调试:
[1]快捷键(F8)直接执行程序,直到下一个断点处停止。
[2]快捷键(F5)单步执行程序,遇到方法时进入。
[3]快捷键(F6)单步执行程序,遇到方法时跳过。
[4]快捷键(F7)单步执行程序,从当前方法跳出。
查看断点时变量当前的值:右键点击对应的变量,在菜单上选择 watch 菜单项,变量的值就会出现在 expressions窗口中.
二、Android应用调试之工具
Eclipse Java编辑器
这个编辑器不但能够为开发者提供代码编写、语法纠错和实时编译等常用功能,而且还能够对Java源代码进行快速修改、重构等高级操作。
详讲:错误提示符(一个小电灯泡图标和一个红色的X)指出了错误所在的位置,在屏幕的右上角有一个红色的标记,它的作用是提示开发者该文档的某个位置存在错误。在文档的右边空白处还能看到一个红色的矩形框,它指明了错误所在的大致位置,如果代码量非常大,可以将竖直滚动条拖到这个红色矩形块的位置,快速定位错误。
Java和Dalvik编译、构建系统
Android应用程序最终是运行在手机(或者模拟器)的Dalvik虚拟机上的。因此对Android应用程序的编译和构建需要用到Java编译器和Dalvik字节码转换器。
Eclipse调试器
Android SDK提供了从Dalvik字节码到Java源代码的映射,这样开发者就可以直接使用Eclipse功能强大的调试器进行Android应用程序的调试。
详讲:Android SDK对于Eclipse调试器来说是完全透明的,可以在Eclipse中像调试普通Java应用程序那样调试Android应用程序。在代码中设置断点是常用的一种调试手段,在Eclipse中可以通过如下3种方法设置断点。
- 使用菜单命令。首先将光标放置到想要设置断点的行,然后执行菜单命令Run->Toggle Breakpoint.
- 使用键盘。选择想要设置断点的行,在键盘上按下快捷键Ctrl+Shift+B。
- 在编辑器中直接双击想要设置断点行左边的空白处。
执行菜单命令Run->Debug->Android Application,开始对程序进行调试。初始化过程与正常运行程序一样,如果需要会对项目进行重新构建,然后启动模拟器,加载程序。程序正常启动以后在模拟器上就会出现DebugTest的用户界面。程序将会在断点位置停止执行,Eclipse会自动切换到Debug布局。在Debug布局中包含了如下一些视图:
- Debug
Debug标签页用来显示程序执行过程中的调用栈。在Debug标签页的工具栏上有一些功能按钮,提供了继续、暂停、终止、单步执行、逐过程执行和返回等功能。
- Variables和Breakpoints
Variables标签页中可以显示出当前代码作用域内的所有变量值。Breakpoints标签页中列出了程序中所有的断点。
- Editor
Debug布局中的编辑器与Java布局中的编辑器一样,只不过在Debug布局中当前执行的代码会高亮显示。
- Outline
Outline视图可以显示出当前项目的结构图。
- Console/Tasks/Properties
这三个视图位于Debug布局的左下角,其中Console(命令行)视图是最有用的一个,在程序调试过程中许多重要的信息都显示在Console视图中。
Logcat
Logcat是Android SDK中的一个通用日志工具。在程序的运行过程中可以通过Logcat打印状态信息和错误信息等。Logcat另外一个重要的用途是在程序启动和初始化的过程中向开发者报告进展状况。
当应用程序在模拟器中加载并启动时,Eclipse会自动切换到Debug布局,关于程序运行状态的各种信息就会出现在右下方的Logcat视图中。为了更加方便的浏览Logcat视图中的内容,可以用鼠标单击Logcat视图右上角的最大化按钮。Logcat视图中出现的信息,按照消息产生的顺序,最开始是关于模拟器启动的消息,接着是Android操作系统启动的消息,然后是各种应用程序启动消息,最后才是与加载程序启动相关的消息。在Logcat视图的工具栏中可以看到标记为V、D、I、W和E的几个按钮,他们的作用是对消息进行过滤。
- V(Verbose)显示所有类型的消息;
- D(Debug)显示Debug、Information、Warning和Error消息;
- I(Information)只显示Information、Warning和Error消息;
- W(Warning)只显示Warning和Error消息;
- E(Error)只显示Error消息。
Logcat视图中包含了如下列:
- Time:用于显示消息产生的时间;
- Priority(这一列并没有在标题栏中显示地标出)消息的级别(取值为D、I、W或者E,分别代表Debug、Information、Warning和Error);
- pid:产生消息的进程ID;
- tag:消息产生来源的简短描述;
- Message:消息的详细内容。
注意:在程序开发过程中,如果需要多人协作进行错误的调试,那么就要对Logcat日志进行共享。导出Logcat日志的方法非常简单,首先在Logcat视图中选中想要导出的日志内容,然后鼠标单击Logcat视图右上角的向下箭头,这时就会弹出一个菜单,在菜单的最下方有一个名为Exports Selection as Text的菜单项,执行这个菜单项,就可以将选中的日志保存成一个文本文件。
Android Debug Bridge(adb)
adb是Android SDK中包含的一个可以直接对Android手机或者模拟器进行操作和调试的命令行工具。
DDMS(Dalvik虚拟机调试监控服务,Dalvik Debug Monitor Service)
DDMS是Android SDK中包含的一个窗口化的程序调试环境,它与Eclipse和Dalvik虚拟机紧密结合在一起。
详讲:见日志——常见的adb命令。
Traceview
Android平台特有的调试工具,它可以跟踪并报告程序运行过程中的所有方法调用和每个方法的耗时。
三、Android调试总结
一. Log 日志输出
可在 Window->Show View->Other->Android->Log Cat 调出 Log Cat 界面
常用的日志: 普通运行信息:i 错误信息:e
输出日志: Log.i(TAG, strings); 其中TAG 为日志标识符,一般用类名表示(方便查看此日志是某个类的输出),且常声明为静态常量.stirngs 为要输出的字符串.例:
public class PhoneSMSTest extends AndroidTestCase {
private static final String TAG = "PhoneSMSTest"; public void testPhoneSMS() throws Exception {
Log.i(TAG, "PhoneSMSTest....");
}
}
成功运行程序后,在输出日志Log Cat 视图中 即可查看到标识为 PhoneSMSTest 的信息.
PS:可在Log cat 中创建一个过虑器,Log cat->create filter->Filter Name:随意.by tab name: 日志标识符,此处为 PhoneSMSTest
二.Debug 调试
双击代码编辑器左侧设置断点 点击菜单栏 Run(或F11) 便可开始程序调试.程序运行到断点处时会弹出一对话框,点击 yes 跳入Debug 视图, 找到正在调试的类
Run->step Into 逐语句 (或F5)
Run->step Over 逐过程 (或F6,略过方法)
Run->step Return 单步返回(或F7 , 逐语句进入方法后跳出.);
Run->Run To Line 运行到光标处 (或 Ctrl + R)
Run->Resume 断续运行到结束 (或F8)
三. 单元测试
1.配置AndroidMainfest.xml
在application 中加入
<uses-library android:name="android.test.runner" /> <!-- 不要写入 activity 中 -->
在application 外加入
<!-- targetPackage 要与 mainfest 中的 package 的值相同. -->
<instrumentation android:name="android.test.InstrumentationTestRunner"
android:targetPackage="com.PhoneSMS.melody" android:label="Test for my app" />
2.编写单元测试代码
注意:在targetPackage 包中建立单元测试类 如:在 com.PhoneSMS.melody 中建立 PhoneSMSTest.java. 此类必须继承 AndroidTestCase 且其中的测试方法必须以 test 开头, 如: testPhoneSMS();
代码如下:
PhoneSMSTest.java package com.PhoneSMS.melody; import android.test.AndroidTestCase;
import android.util.Log; public class PhoneSMSTest extends AndroidTestCase {
private static final String TAG = "PhoneSMSTest"; public void testPhoneSMS() throws Exception {
// 你要测试的代码
//Log.i(TAG, "PhoneSMSTest....");
}
}
在大纲视图(Outline)中找到测试方法->右健->Run As ->Android JUnit Test 即可.ps: 调出Outline :window->Show View ->Outline
四、Android 开发之Eclipse Debug调试详解
1.在程序中添加一个断点
如果所示:在Eclipse中添加了一个程序断点
在Eclipse中一共有三种添加断点的方法
第一种: 在红框区域右键出现菜单后点击第一项 Toggle Breakpoint 将会在你右键代码的哪一行添加一个程序断点 (同样的操作方可取消程序断点)
第二种: 在红框区域双击鼠标左键将会在你双击代码的哪一行添加一个程序断点 (同样的操作方可取消程序断点)
第三种 :在光标停留的地方使用快捷键 Ctrl + Shift + B 将会在光标停留的这一行添加一个程序断点 (同样的操作方可取消程序断点)
2.运行Debug 调试 让程序停留在添加的断点上
如下图所示,在红框内点击下拉菜单选中需要调试的项目 则开始运行Debug调试
如果不在下拉表中选直接点击表示Debug运行默认项目(默认项目为上一次运行的项目)
Debug调试 快捷键为单击F11
分析一下如何科学的添加程序断点, 上图中我为了加断点查看生成出来随机数的值我一共添加了6个程序断点,绿框表示最为科学的断点位置 ,红框表示不科学的位置。 我们分析一下为什么, 如果switch case 中的代码片段过长 或者 case 的数量过多 如果采用红框的方式来添加程序断点,程序员须要添加很多程序断点万一有疏漏 所以会很难快速定位代码执行到了那里 ,如果使用绿框的方式添加程序断点,程序员只须要在断点出按 F6 单步跳过这一行代码就会走进正确的case中方便继续调试。
Debug调试运行后,程序停在了红框处,按F6单步跳过 发现随机数为4 程序停留在了绿框中,程序员可以迅速定位random的值为4
3.程序停留后查看变量的数值
蓝框中的内容表示为断点的入口方法, 就好比你的断点是从那个方法进来的,学会看这个真的非常重要, 好比我现在明确知道我的一个方法在被调用的时候方法中会出现错误,但是这个方法在程序中100个地方都在调用,我可能断定实在那里调用的时候出的错误,我不可能在100个调用它的地方都加一个断点,我可以在方法中添加程序断点 然后在篮框中查看程序是从那个地方走进这个方法的,便可以快速定位问题所在。
绿框中可以查看当前方法中所有变量的值,但是如果变量非常多在这里看就比较麻烦,可以使用红框的方法查看。
红框中可以右键变量名点击咖啡框中的watch 后 在紫框中Expressions 就可以看到变量的数值了。
BreakPoints 中会记录程序中添加过多少程序断点。
4分享一些Eclipse中Debug的一些小技巧
watch 过的变量 和我们自己加的程序断点不会被Eclipse 自动删除 除非我们手动删除否则会一直留在紫框中,这些数值会拖慢Eclipse 开发工具,如果过多的话很可能会造成 Eclipse 崩溃(有可能是Eclipse的BUG),让开发变得非常痛苦,所以雨松MOMO在这里建议大家在每次Debug调试的时候将紫框中之前 加的程序断点 和 watch过的变量 全不手动清空,只添加这一次调试须要的断点就可以了,这样的话 Eclipse 就不会被这些拖慢进程的东西所导致崩溃。
5.连接真机调试
第一步 打开自己的手机在设置中选择应用程序 然后选择开发 然后选中USB调试。
第二步 用USB线连接手机到电脑,一般情况会自动安装驱动,如果无法安装驱动的话 就去下载一个豌豆荚 或者91助手,让它帮我们手机自动安装驱动 很方便的。
第三步 驱动安装成功后会在Device中看到真机(红框中) 绿框中为android电脑模拟器
.
运行项目后弹出设备选择窗口 第一个为模拟器 第二个红框内的为我连接电脑的真机 MOTO的里程碑,选择完后点击OK 就可以通过真机来调试程序了,简单吧?是不是很给力呢呵呵。
6.Android 开发中Log信息的打印
本人做过J2ME 开发 Android开发 iPhone开发 发现J2ME 的模拟器 还有Iphone的模拟器都非常给力速度很很快(模拟器比真机快) 唯独android的模拟器 是最不给力的 (真机比模拟器快) 实在是慢的不行 连接上真机可以快一点 但是一样还是慢 尤其是Debug的时候 简直是太不给力了(发点牢骚大家别介意哦。所以有时候我在开发Android的时候不到万不得已我不去Debug 我会使用Log去打印我须要的数据 下面我教大家如何在Andoid下打印Log信息。希望大家都学会使用log.
常用的Log有5个:Log.v() Log.d() Log.i() Log.w() Log.e() 。
根据首字母对应VERBOSE,DEBUG,INFO, WARN,ERROR。
以上这些Log系统都会打印出来。
打开LogCat页面发现系统打印了很多Log信息 我们不好定位出刚才自己打的Log,如图所示点击红框内的“+”符号弹出下方窗口后在Filter Name : 和 by Log Tag: (蓝框内)填写我们刚才打的LOG tag “random” 注意这两项都必需填写 然后单击OK后 方可在绿框中看到我们刚才打的random的Log 。怎么样还是很简单的吧 呵呵。
Android eclipse中程序调试的更多相关文章
- [安卓][转]Android eclipse中程序调试
一:断点调试 用eclipse开发android程序的时,跟VS一样是可以断点单步调试的.步骤如下.1 设置断点:在编码窗体的左边框上用鼠标双击,或者右键点击菜单,选择 Toggle Breakpoi ...
- 052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试——debug2 多断点调试程序
052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试--debug2 多断点调试程序 本文知识点: Eclipse下程序调 ...
- 051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1
051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试--debug入门1 本文知识点: 程序调试--debug入门1 程序 ...
- Nodejs学习笔记(二)——Eclipse中运行调试Nodejs
前篇<Nodejs学习笔记(一)——初识Nodejs>主要介绍了在搭建node环境过程中遇到的小问题以及搭建Eclipse开发Node环境的前提步骤.本篇主要介绍如何在Eclipse中运行 ...
- 如何在Eclipse中Debug调试Java代码
背景 有的时候你想debug调试Java的源代码,就想试图在Java源代码中设置断点,在Eclipse中常常会出现Unable to insert breakpoint Absent Line Num ...
- Fitnesse在eclipse中的调试
需要在Fitnesse的wik中添加: '''此句话专门用来Debug'''!define COMMAND_PATTERN {java -Xdebug -Xrunjdwp:transport=dt_s ...
- Eclipse中debug调试java代码一直报Source not found的解决办法
今天使用eclipse的debug调试代码,一直没法正常调试,一按F6就提示Source not found 根据提示发现可能是另一个项目影响了,所以把另一个项目Close Project,这次直接t ...
- Eclipse 中 Debug 调试 java 代码一直报 Source not found
今天使用eclipse的debug调试代码,一直没法正常调试,一按F6就提示Source not found 根据提示发现可能是另一个项目影响了,所以把另一个项目Close Project,这次直接t ...
- wso2ESB - 在eclipse中启用调试模式
最近在使用wso2ESB,记录一下使用过程中碰到的坑,先写一篇调试的(前面的工具安装就不介绍了,既然想用调试了说明你已经看过一部分文档了),以后可能会介绍其他功能的使用. 在wso2 ei的文档中,介 ...
随机推荐
- iOS网络传输Delegate不被触发的本质原因
NSURLSession一共有四种Delegate (文后附表有Session和SessionTask分类表格) NSURLSessionDelegate, NSURLSessionDownloadD ...
- jQuery设计思想
jQuery设计思想 原文网址:http://jqfundamentals.com/book/ 阮一峰 翻译整理 [目录] 一.选择网页元素 二.改变结果集 三.链式操作 四.元素的操作:取值和赋值 ...
- boost之mutex scoped_lock
1.boost里的互斥量类型由mutex表示. 代码示例: #include <iostream> #include <string> #include <vector& ...
- 引擎设计跟踪(九.14.2b) 骨骼动画基本完成
首先贴一个介绍max的sdk和骨骼动画的文章, 虽然很早的文章, 但是很有用, 感谢前辈们的贡献: 3Ds MAX骨骼动画导出插件编写 1.Dual Quaternion 关于Dual Quatern ...
- ASP.NET状态管理详解,让你明明白白
开发WinFrom的程序员可能不会在意维护应用程序的状态,因为WinFrom本身就在客户端运行,可以直接在内存中维护其应用程序状态.但ASP.NET应用程序在服务器端运行,客户端使用无状态的http协 ...
- 驱动笔记 - IO端口和IO内存
访问IO端口 (#include <asm/io.h>) 设备资源struct resource{ resource_size_t start; //资源起始物理地址 resource_s ...
- 一套名企WEB前端面试题,不提供答案
1.说说你对Doctype的理解 2.web产品开发的流程 3.说说你对盒子模型的理解 4.前端页面有哪三层构成,分别是什么?作用是什么? 5.行内元素有哪些?块级元素有哪些?他们如何相互转化? 6. ...
- TKStudio 4.6IDE Warning: L6310W: Unable to find ARM libraries.
我也遇到了同样的问题.搞了很久,按下面的操解决了 内容转至:http://bbs.zlgmcu.com/dv_rss.asp?s=xh&boardid=43&id=23032& ...
- uva 10564
Problem FPaths through the HourglassInput: Standard Input Output: Standard Output Time Limit: 2 Seco ...
- Gdata XML解析配置和简单使用
导入libxml2,使用第三方AFNetworking网络请求,第三方XML解析GData GData需要的配置 Build Settings 里搜索,添加如下