`

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 Studio的调试器、Logcat、布局检查器、内存分析工具等。 一、Android Studio调试器 Android Studio内置了强大的Java和Kotlin调试器,可以设置断点,单步...

    Android的调试原理

    Android 调试原理 Android 调试原理是指 Android 操作系统中用于调试和测试 Android 应用程序的机制。该机制主要包括三个部分:adb client、adb daemon 和 adb server。 一、adb 介绍 adb(Android Debug Bridge...

    Android串口调试助手源码

    【Android串口调试助手源码】是一个专门为Android平台设计的串行通信开发工具,它基于Android Studio构建,旨在帮助开发者进行设备间的串口通信调试。这个应用提供了多种实用功能,如串口扫描、数据的文本和十六进制...

    android_命令大全

    ### Android命令大全详解 #### 一、概述 在Android开发过程中,熟练掌握并运用各种命令行工具对于提高工作效率至关重要。本文将详细介绍与Android相关的几个常用命令及其使用方法,包括`android.bat`、`emulator....

    Android 调试背光亮度曲线-斜线

    "Android调试背光亮度曲线-斜线"这个主题聚焦于如何调整和优化设备的背光亮度曲线,使其更符合用户需求或提高设备性能。背光曲线指的是亮度值与屏幕显示内容变化之间的关系,通过调试这一曲线,我们可以让设备在不同...

    安卓Android串口调试助手

    【Android串口调试助手详解】 在嵌入式开发和物联网(IoT)领域,串行通信扮演着至关重要的角色,特别是在Android设备上进行硬件交互时。Android系统虽然主要设计为移动设备的操作系统,但其丰富的API和开放性使得...

    Android 程序调试技术学习

    此外,Android Studio的布局调试器可以帮助你实时查看和调整UI元素,而网络调试器则可以分析应用程序的网络请求,这对于优化网络性能和处理数据交换问题非常有帮助。 性能调试是另一个重要的方面。例如,使用...

    Android 设备串口调试助手,亲验Android10可用

    在Android开发过程中,设备串口调试是一个至关重要的环节,它能帮助开发者深入理解系统运行机制,定位和解决问题。...同时,了解和掌握adb的基本使用方法,对于任何Android开发者来说都是必不可少的技能。

    android真机调试设置

    Android 真机调试设置 Android 真机调试设置是 Android 开发者不可或缺的一部分。很多开发者习惯于在模拟器上运行和调试程序,但是在真机上调试却不知所措。其实,设置真机调试非常简单,只需要按照正确的步骤进行...

    Android 调试检测技术

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

    android常用代码大全及入门电子书

    12. **Android调试**:使用Android Studio的调试工具,如Logcat、Breakpoints、Profiler等,可以帮助定位和解决问题,优化代码性能。 13. **版本适配**:由于Android设备的碎片化,开发者需要考虑不同屏幕尺寸、...

    Smart_see(Android调试助手)

    《Smart_see:Android调试助手详解》 在移动应用开发领域,Android系统占据了主导地位,开发者们需要频繁地进行应用程序的调试与优化。为了提升这一过程的效率,一款名为"Smart_see"的Android调试助手应运而生。...

    Android串口调试工具(两个).rar

    在Android平台上进行串口通信调试是一项重要的任务,尤其对于硬件开发者和嵌入式系统工程师而言。串口通信,也称为UART(通用异步接收/发送器),是一种在电子设备之间交换数据的简单方式。本资源提供了两个Android...

    android真机USB调试

    在Android应用开发过程中,使用真机进行USB调试是一种常见的实践方式,它可以帮助开发者更直观地测试应用程序的...尽管这篇指南是为初学者准备的,但对于任何想要了解这一基础调试方法的人来说,都是一个有价值的参考。

    Android Studio断点调试详解

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

    Android调试

    在Android开发过程中,调试是必不可少的一个环节,它能帮助开发者找出...总之,熟练掌握Android调试技巧,包括断点的合理设置、真机调试的连接以及日志的使用,能够极大地提高开发效率,及时发现和修复程序中的问题。

    android无线调试工具及方法

    在Android开发过程中,调试是必不可少的一环,而无线调试工具及方法为开发者提供了极大的便利,尤其是在没有数据线或者多设备间切换调试时。"android无线调试工具及方法"这一主题,核心是利用ADB(Android Debug ...

    ubuntu上android真机调试脚本文件和wifi调试apk

    标签中的“ubuntu android调试 wifi调试”进一步强调了这两个主题的重要性。在实际开发中,掌握这些技能对于提升效率和解决复杂问题至关重要。通过Ubuntu进行Android真机调试和利用WiFi调试APK,开发者可以在更加...

    Android JNI 断点调试C++

    2. 在Android Studio中运行应用,当执行到本地方法时,调试会暂停在C++断点处。 3. 使用Android Studio的调试工具查看变量值,步进执行,检查调用栈等。 注意事项: - 调试C++代码时,可能需要使用GDB(GNU ...

Global site tag (gtag.js) - Google Analytics