`

Android调试方法大全

阅读更多

 

Android调试方法大全

 

 

 

Jason in iteye.com 

 

 

 

写代码是每个程序员最乐意做的事,然而在开发中也会遇到很多令程序员很头疼的事情。如果说让程序员最头疼的事情是看到无数bug、软件的发布遥遥无期,那么让程序员最最头疼的事情是程序在调试状态下没有问题然而在实际运行中确有问题。

调试程序是每个程序员工作中必不可少的部分,而且可以毫不夸张地说调试程序占用了程序员50%的工作时间。由此可见,调试程序是每个程序员必不可少的技术,调试水平的高低决定了程序员水平的高低。

在开发Android程序前,有必要总结下如何调试Android程序。

目前就开发过程中,常用调试程序的方法总结如下:

  1. 使用Eclipse开发平台调试;
  2. 结合Android  SDK调试;
  3. 使用JUnit调试;




使用Eclipse开发平台调试

这是使用Eclipse工具开发Android必须熟练掌握的调试技术,主要包括:设置断点、查看变量值、查看当前堆栈等。打开Eclipse工具,单击“Run”

debug-run

以及在调试的过程中,打开其他调试面板,相信只要使用一次就完全明白了。不要小瞧这些调试工具,只要你细心,说不定其他同事好几天没有解决的bug,你通过这些工具就发现了。所以熟练使用这些工具,是开发人员必须的,在有些时候甚至可以事半功倍的效果。

结合Android SDK调试

在复杂的程序运行过程中,如何调试程序了?把程序运行过程的信息保存为文件或者输出到IDE中,这样就可以知道程序是否是正常运行了。

在Android中可以使用Log类,Log类在android.util包中,可以使用它将运行过程的信息输出到IDE中,直接查看程序运行的过程。Log 类提供了若干静态方法 :

Log.v(String tag, String msg); Log.d(String tag, String msg); Log.i(String tag, String msg); Log.w(String tag, String msg); Log.e(String tag, String msg);

 

分别对应 Verbose,Debug,Info,Warning,Error。 tag是一个标识,可以是任意字符串,通常可以使用类名+方法名,主要是用来在查看日志时提供一个筛选条件。程序运行后,在show view中选择Locat就可以直接看到输出了。也可以在程序运行后,可以通过DDMS 查看程序的运行过程记录,并可以通过String tag来过滤输出的信息,关于Android DDMS如何使用,请阅读Android DDMS使用详细说明

除了以上方法外,我们也可以把程序运行过程信息的输出当作程序运行的一部分,比如使用Toast Notificatio将输出信息显示在界面中,当然这些只是些调试代码,在发布程序时需要去掉。

最后一种方法,也是最有效的一种方法,直接将运行过程的信息以文件的方式存储,在程序运行后打开文件,查看输出的信息。在一些复杂的工具中,都是用这种日志文件的方法来记录文件运行的过程。如何在Android中读写文件,请阅读Android数据存储(总结篇)

看了以上2种方法是否觉得:以上只是在发现问题后找到问题的原因,解决问题,是不是有些被动的、消极的,有没有其他有效的方法来避免bug?看到这里,有些“牛”人就说了:我写的代码几乎没有bug,我的代码好几年都没有发生过崩溃现象了。从我个人的观点说:的确牛。至少我自己,感觉自己的代码似乎很脆弱,要想写一个完全正确的代码真的不容易。自己考虑了很多,为什么会这样,难道是自己写的代码的确很差?至少我自己在写代码的过程中都是很仔细的,尽量把问题考虑清楚了在写的,每次修改都是小心翼翼的!后来发现,每段代码在写的时候都是有一些“运行环境”的,在后来使用的过程中,这个环境逐渐被破坏,以致最后修改的乱七八糟。如果你也有同受,建议你仔细阅读以下说明!

 

使用JUnit调试

Android增加了对JUnit的支持,这对程序员来说,是个很好消息。

首先说明下JUnit是用来解决什么问题的?JUnit是采用测试驱动开发的方式,也就是说在开发前先写好测试代码,主要用来说明被测试的代码会被如何使用,错误处理等;然后开始写代码,并在测试代码中逐步测试这些代码,直到最后在测试代码中完全通过。

看了是否感觉有些不符合程序员的思维习惯(先写代码然后在调试),的确这也是JUnit是对程序员思维的“颠覆”。在这里我自己也感觉,好像很难做到,为什么?在一匹“马”没有完全设计好前,怎么规定这匹“马”将来会如何跑?而且即使把“马”将来会如何“跑”定义好了,在实现的时候“马”被改变了怎么办?说到底还是:一个人不能同时具有2个角色,否则自己有时候就不知道当前是哪个角色!

说到这里,我就说明下,我自己对JUnit “错误”的使用方法,这也许与JUnit测试驱动开发的目的相矛盾,但是的确可以有效地减少bug。JUnit从核心来说就是将源代码与测试代码完全分开,将测试代码作为一个单独的程序。前面介绍的方法,都将源代码与测试代码合为一体,由于源代码的重要性大于测试代码的重要性,所以测试代码经常有不完整、结构不清晰等问题,这样程序员的单元测试也就不完整。JUnit就是被我用来做完整的单元测试,对当前的部分代码,测试其在每种“环境”下的运行结果。
现简要说下JUnit的几个主要功能:

  1. JUnit首先有管理测试用例的功能。修改了哪些代码,这些代码的修改会对哪些部分有影响,通过JUnit将这次的修改做个完整测试。这也就JUnit中所谓的TestSuite。
  2. 如何定义需要测试的代码?这也就是JUnit中所谓的TestCase,根据源代码的测试需要定义每个TestCase,并将TestCase添加到相应的TestSuite方便管理。
  3. 如何定义测试的“环境”?在TestCase测试前会先调用“环境”配置,在测试中使用,当然也可以在直接测试用例中定义测试“环境”。
  4. 最为重要的部分,测试结果的检测。对于每种正常、异常情况下的测试,运行结果是什么、结果是否是我们预期的等都需要有个明确的定义,JUnit在这方面提供了强大的功能。

以上部分与我们平常使用IDE调试的过程是完全一样的,只不过是增加了测试用例管理、测试结果检测等功能,提高了单元的效率,保证了单元测试的完整性,明确了单元测试的目标。带着以上4个问题,简要举例并分析如下:
源代码如下:

public class SampleCalculator { public int add(int augend , int addend) {return augend + addend ;} public int subtration(int minuend , int subtrahend) {return minuend – subtrahend ;} } 测试代码(TestCase)如下: import junit.framework.TestCase; public class TestSample extends TestCase { public void testAdd() { SampleCalculator calculator = new SampleCalculator(); int result = calculator.add(50 , 20); assertEquals(70 , result); } public void testSubtration() { SampleCalculator calculator = new SampleCalculator(); int result = calculator.subtration(50 , 20); assertEquals(30 , result); } }

 
以上TestSample测试用例中就对SampleCalculator进行了完整的单元测试,并对测试结果做了预期说明。当然还需要将TestSample增加到TestCase中方便管理。
import junit.framework.Test; import junit.framework.TestSuite; public class TestAll{ public static Test suite(){ TestSuite suite = new TestSuite(“TestSuite Test”); suite.addTestSuite( TestSample.class); return suite; } }

 

以上就将TestSample增加到”TestSuite Test”中,将来在选择测试用例的过程中只要选择了TestSuite Test,TestSample就将加入当前测试中。如果将来SampleCalculator增加了其他功能,只需要在TestSample增加相应的测试,就可以对TestSample进行完整单元测试。

看到这里对上面4个问题,应该都有了大致的了解。最后需要说明的:对TestCase的管理,是完全界面化的,只需要按照JUnit的要求实现会自动产生UI界面,这个不必担心,还需要下载JUint packeage,根据需求选择自己需要的。大胆尝试下,你会发现编程真的可以如此“美好”。

 

总结说明

以上是在工作中总结的代码调试的方法,并结合Android应用程序开发,为将来深入开发Android应用程序打好坚实的基础。

 

再次总结说明

 

以上内容并不是完全由我原创,由于这篇文章讲得很全,所以我就修改了网友的一些文笔和错误,而且我也找不到原文出处了,因此我就从我的word里面复制了上来,希望对大家有所帮助。

 

 

 

 

 

分享到:
评论
6 楼 zoozooll 2011-06-23  
如果代码能够统一下格式,就完善了
5 楼 大柳树 2011-06-21  
已经在用单元测试的方法开发了,的确好用!
4 楼 _god_ 2011-06-20  
单元测试和调试的概念要分开。

android的调试一般ddms和eclipse调试就够了,基本上所有的信息都有了。


ddms很强大。
3 楼 zhuixinjian 2011-06-20  
一直想知道JUnit 在Android上的测试用例是什么。验证数据正确性?
2 楼 niweiwei 2011-06-19  
楼主写的不错,偶一直想学习JUnit,但是......
1 楼 q6684273 2011-06-18  
写的不错。。。

相关推荐

    Android调试工具及方法

    Android调试工具及方法Android调试工具及方法Android调试工具及方法Android调试工具及方法Android调试工具及方法

    android调试方法总结

    android调试方法总结,总结 android 调试 的一般方法,

    Android的调试原理

    Android的调试原理 Android的调试原理

    Android 调试桥

    Android 调试桥

    Android 调试检测技术

    Android 调试检测相关知识, 防止程序被逆向, 破解. Android 调试检测相关知识, 防止程序被逆向, 破解.

    Android 调试桥adb

    Android 调试桥 adb Android 调试桥 adb Android 调试桥 adb

    Android串口调试助手源码

    Android Studio开发的串口调试助手源码,支持串口扫描、字符串和十六进数据制显示和发送等功能。

    android程序调试详解,解决程序排错的方法

    android程序调试详解,解决程序排错的方法

    Android 反动态调试

    Android 检查动态调试 最近项目中,三方安全报告中一直存在动态调试检测的高危漏洞。经过多次探索研究,参考了网上不少示例,集大家所成,研究在Android studio 3.0以上,可以使用的示例代码。

    高通8155p平台QNX+Android9开启ASAN定位内存问题方法Android.mk与Android.bp都有

    高通8155p平台QNX+Android9开启ASAN定位内存问题方法。里面有所有的Android.mk与Android.bp示例。不会写Android.mk与Android.bp,或者常有编译问题的可以下载参考,解决无法使能ASAN的问题。不会用的一定要展开下面...

    android真机调试设置

    android真机调试设置文档,新手必看,怎样设置使用真机调试Android程序

    android开发资料大全

    Android Wifi方法大全【总有一种方法适合你】 android开发环境搭建篇详尽的教程实例汇 图形图像之图像处理(缩放 旋转 转化) android开发之【腾讯微博android客户端开发】Parameter类和SyncHttp 网友自己写的...

    Android通过Chrome Inspect调试WebView的H5 App离线.rar

    1.前端开发离不开Chrome的开发者工具,尤其是调试Android WebView时。然而,如果使用chrome://Inspect的方法,国内的开发者会惊奇地发现“空白啊”!为此,我发布过这个离线包的解决方案!可以无需FanQ就能调试了。 ...

    Android高通MIC增益调试

    Android高通MIC增益调试 ,麦克风模拟输入增益控制的属性为ADCx Volume

    Android Studio断点调试详解

    众所周知,断点调试是一个合格程序员必备的一种技能,断点调试可以帮助我们查看程序运行期间每一步各变量的值,学会调试可以帮我们节省很多排查问题的时间,下面我们将来介绍一下Android Studio调试的方法和技巧。...

    Android视频调试指南

    Android视频调试指南

    android真机USB调试

    很多android开发者都是在模拟器上运行、调试程序,突然接触到真机反而不知道怎么使用真机调试,也许知道可以用USB连接进行调试,但不知道具体如何设置,也有的开发者完全不知道可以利用真机进行USB调试,这里指新手...

    《Android应用测试与调试实战》施懿民高清PDF完整版

    《Android应用测试与调试实战》高清完整版是Android应用测试与调试领域最为...三种Android应用开发方式所需要的测试和调试技术、方法进行了细致而深入的讲解,为Android应用的自动化测试和调试提供原理性的解决方案。

    Android源码本地C++代码调试方法

    Android源码的Java代码调试方法比较简单,网上很多资料。 使用GDB调试C++代码的方法也有,不过实践起来容易被各种问题卡住。本文章权当多一个参考。

    android串口调试工具

    android串口调试工具.首先需要有串口读写权限 android模拟器下,控制台里进入"androidsdk目录\tools",emulator 你的模拟器名称 -qemu -serial COM1. 控制台里进入"androidsdk目录\platform-tools",输入adb shell ...

Global site tag (gtag.js) - Google Analytics