【Android源码 栏目提醒】:网学会员--在 Android源码 编辑为广大网友搜集整理了:调试android程序的三种方法 - 网络与通信绩等信息,祝愿广大网友取得需要的信息,参考学习。
调试
android程序的三种方法 写代码是每个程序员最乐意做的事然而在开发中也会遇到很多令程序员很头疼的事情。
如果说让程序员最头疼的事情是看到无数bug、软件的发布遥遥无期那么让程序员最最头疼的事情是程序在调试状态下没有问题然而在实际运行中确有问题。
调试程序是每个程序员工作中必不可少的部分而且可以毫不夸张地说调试程序占用了程序员50的工作时间。
由此可见调试程序是每个程序员必不可少的技术调试水平的高低决定了程序员水平的高低。
在开发
Android程序前有必要总结下如何调试
Android程序。
目前就开发过程中常用调试程序的方法总结如下 使用Eclipse开发平台调试 结合
Android SDK调试 使用JUnit调试 使用Eclipse开发平台调试 这是使用Eclipse工具开发
Android必须熟练掌握的调试技术主要包括设置断点、查看变量值、查看当前堆栈等。
打开Eclipse工具单击“Run” 以及在调试的过程中打开其他调试面板相信只要使用一次就完全明白了。
不要小瞧这些调试工具只要你细心说不定其他同事好几天没有解决的bug你通过这些工具就发现了。
所以熟练使用这些工具是开发人员必须的在有些时候甚至可以事半功倍的效果。
结合
Android SDK调试 在复杂的程序运行过程中如何调试程序了把程序运行过程的信息保存为文件或者输出到IDE中这样就可以知道程序是否是正常运行了。
在
Android中可以使用Log类Log类在
android.util包中可以使用它将运行过程的信息输出到IDE中直接查看程序运行的过程。
Log 类提供了若干静态方法 Log.vString tag String msg Log.dString tag String msg Log.iString tag String msg Log.wString tag String msg Log.eString tag String msg 分别对应 VerboseDebugInfoWarningError。
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的几个主要功能 JUnit首先有管理测试用例的功能。
修改了哪些代码这些代码的修改会对哪些部分有影响通过JUnit将这次的修改做个完整测试。
这也就JUnit中所谓的TestSuite。
如何定义需要测试的代码这也就是JUnit中所谓的TestCase根据源代码的测试需要定义每个TestCase并将TestCase添加到相应的TestSuite方便管理。
如何定义测试的“环境”在TestCase测试前会先调用“环境”配置在测试中使用当然也可以在直接测试用例中定义测试“环境”。
最为重要的部分测试结果的检测。
对于每种正常、异常情况下的测试运行结果是什么、结果是否是我们预期的等都需要有个明确的定义JUnit在这方面提供了强大的功能。
以上部分与我们平常使用IDE调试的过程是完全一样的只不过是增加了测试用例管理、测试结果检测等功能提高了单元的效率保证了单元测试的完整性明确了单元测试的目标。
带着以上4个问题简要举例并分析如下 源代码如下 public class SampleCalculator public int addint augend int addend return augend addend public int subtrationint 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.add50 20 assertEquals70 result public void testSubtration SampleCalculator calculator new SampleCalculator int result calculator.subtration50 20 assertEquals30 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 TestTestSample就将加入当前测试中。
如果将来SampleCalculator增加了其他功能只需要在TestSample增加相应的测试就可以对TestSample进行完整单元测试。
看到这里对上面4个问题应该都有了大致的了解。
最后需要说明的对TestCase的管理是完全界面化的只需要按照JUnit的要求实现会自动产生UI界面这个不必担心还需要下载JUint packeage根据需求选择自己需要的。
大胆尝试下你会发现编程真的可以如此“美好”。
总结说明 以上是在工作中总结的代码调试的方法并结合
Android应用程序开发为将来深入开发
Android应用程序打好坚实的基础。
上一篇:
Android系统开发毕业设计
下一篇:
科研管理杂志简介