谈使用Eclipse与DDMS调试Android程序的方法

      在Eclipse开发工具中调试程序的方法很多,但是使用Eclipse调试Android程序时需要注意一些细节上的问题。许多刚接触 Android的开发者,在调试Android程序时总是不能迅速地找到程序的错误所在,Eclipse+ADT的开发环境中没有直接跟踪对象内容的方法,但是我们可以使用Google提供的ADT插件DDMS(Dalvik Debug Monitor Service)在Eclipse上轻松地调试Android程序。

        DDMS为我们提供了很多功能,例如:测试设备截屏,针对特定的进程查看正在运行的线程以及堆信息,Logcat,广播状态信息,模拟电话呼叫,接收SMS,虚拟地理坐标等等,下面我们通过DDMS来调试我们的Hello Android项目。

       (1)将Eclipse开发工具的工作界面切换到DDMS标签。首先确定Eclipse开发工具右上角是否有“DDMS”标签,如果有,则直接点击该标签即可切换到DDMS工作界面,如下图所示。

谈使用Eclipse与DDMS调试Android程序的方法

       如果没有,则点击'Open Perspective'按钮,选择'Other...'命令按钮,打开'Open Perspective'对话框,如下图所示。

谈使用Eclipse与DDMS调试Android程序的方法

       在'Open Perspective'对话框中选择'DDMS'选项,然后点击'确定'按钮,如下图所示。  

谈使用Eclipse与DDMS调试Android程序的方法

       (2) 在 'DDMS'界面中选择'Devices'标签,查看其菜单的功能,我们可以看到Debug Process(调试进程)、Update Threads(更新线程)、Update Heap(更新堆)、Cause GC(引起垃圾回收)、Stop Process(停止进程)、Screen Capture(屏幕截图)、Reset adb(重启Android Debug Bridge)菜单选项,如下图所示。

谈使用Eclipse与DDMS调试Android程序的方法

       (3) 从上图中可以观察到Android程序运行时的各种状态,比如进程信息、线程分析、堆内存的占用,结束一个进等程。当然,这些操作都是在DDMS框架下进行的,日常开发的程序是无法执行调用的。如果adb调试桥运行不稳定,可以选择'reset adb'来重新启动'adb.exe'进程。下面我们介绍如何使用DDMS的'Logcat'来调试Android程序。

       'Logcat' 通过'android.util.Log'类的静态方法来查找错误和打印系统日志消息。它是一个进行日志输出的API,我们在Android 程序中可以随时为某一个对象插入一个Log,然后在DDMS中观察Logcat的输出是否正常。android.util.Log常用的方法有以下5个:

       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);

       这5种方法的首字母分别对应VERBOSE、DEBUG、INFO、WARN、ERROR。当利用DDMS进行调试时,它们的区别并不大,只是显示的颜色不同,我们可以控制要显示的某一类错误,一般我们如果使用'断点'方式来调试程序,则使用Log.e比较合适。但是根据规范建议Log.v,Log.d信息应当只存在于开发过程中,最终版本只可以包含Log.i, Log.w,Log.e这三种日志信息。下面我们对'HelloAndroid'程序进行调试,首先修改'HelloAndroid.java'如下面代码所示。我们在代码中加入了需要输出的日志信息。

        代码:HelloAndroid.java

Java代码
  1. package com.yarin.Android.HelloAndroid;      
  2.      
  3. import android.app.Activity;      
  4. import android.os.Bundle;      
  5.      
  6. import android.util.Log;      
  7.      
  8. public class HelloAndroid extends Activity      
  9. {      
  10.           
  11.     private static final String TAG = 'HelloAndroid';      
  12.           
  13.     public void onCreate(Bundle savedInstanceState)      
  14.     {      
  15.         super.onCreate(savedInstanceState);      
  16.               
  17.         Log.v(TAG,'VERBOSE');      
  18.         Log.d(TAG,'DEBUG');      
  19.         Log.i(TAG,'INFO');      
  20.         Log.w(TAG,'WARN');      
  21.         Log.e(TAG,'ERROR');      
  22.         setContentView(R.layout.main);      
  23.     }      
  24. }    

       同样我们以前常用的System.out.println();的结果也会输出在这里而不是显示在传统的控制台中。另外在DDMS视图中devices中可以通过“Screen Capture”图标(一个相机图标)可以截出当前android虚拟机的屏幕。

你可能感兴趣的:(android)