Chinaunix首页 | 论坛 | 博客
  • 博客访问: 408873
  • 博文数量: 47
  • 博客积分: 1488
  • 博客等级: 上尉
  • 技术积分: 729
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-15 11:35
文章分类

全部博文(47)

文章存档

2012年(4)

2011年(22)

2010年(21)

分类: 嵌入式

2011-06-05 06:15:00

2. Android SDK 自带的调试工具
    Android SDK 提供了多个用于调试的独立工具, Android Debug Bridge (ADB), LogCat, Hierarchy Viewer 和 TraceView, 这些工具都可以在 SDK 的 tools 目录中找到。
  
    (1)使用ADB
     ADB 提供了管理仿真器或实际设备的方法, ADB 含有三个组件: client, server 和 daemon。client 通过 ADB shell脚本在开发机器上启动; server 在开发机器上作为后台进程运行;daemon 是运行在仿真器或实际设备的Android系统中的守护进程。 server 可以通过以下方式启动或停止:
     adb start-server
     adb kill-server
    (2) 使用 LogCat
    LogCat 是Android 提供的一个实时日志工具,它收集系统和应用的日志数据缓存起来, 用户可以进行查看和过滤, 它可以作为独立的工具, 在上一篇中还提到它可以作为DDMS的一部分。
    LogCat 工具可以在你使用 adb shell 命令登录设备之后使用,或者通过 adb 使用 logcat 命令, 即:
    > adb shell
    $ logcat [
    或
    > adb logcat [
 
    所有利用 android.util.Log 产生的日志消息都有一个关联的标签和优先级。标签应当有意义, 使用标签和优先级使得日志消息易于阅读和过滤。可能的优先级有:
    V -- Verbose (最低优先级)
    D -- Debug
    I -- Info
    W -- Warning
    E -- Error
    F -- Fatal
    S -- Silent (最高优先级, 不打印任何消息)
 
    LogCat 数据有多个维度的信息, 应该使用过滤器避免信息过量; 过滤器类似这样的形式:
    tag:priority, 把过滤器作为参数传给logcat命令就可以了, 例如:
    adb logcat ActivityManager:V *:S
    该命令显示所有 ActivityManager 的 V 数据, 其它的不输出。
   
    Android 日志记录使用环形缓存系统, 缺省的所有信息都记录到主日志缓存。 至于 Android 2.2, 有两个缓存,一个保存 radio/telephony 相关的消息, 一个保存事件相关的消息,不同的缓存可以使用 -b 开关启用, 例如:
    adb logcat -b events
    adb logcat -b radio
    adb logcat -b telephony
 
    Logcat 在调试基于Java 的应用时很有用, 但当应用涉及 native 组件时, 很难跟踪。 在这种情况下, 本地组件应该把日志信息写进 system.out 或 system.err。 缺省的, Android 系统 发送标准输出和标准错误流(system.out和system.err)到 /dev/null 这个黑洞, 可以使用ADB命令把这些输出进行重定向:
    > adb shell stop                                ## 停止运行的仿真器或设备实例
    > adb shell setprop log.redirect-stdio true     ## 重定向标准输出
    > adb shell start                               ## 重新启动仿真器或设备实例
 
(2) 使用 Hierarchy Viewer
      调试和理解用户界面的最好方式是使用 Hierarchy Viewer。 它提供了视图布局层次的可视化表示(Layout View), 显示的放大观察(Pixel Perfect View)。
      Hierarchy Viewer 通过工具 hierarchyviewer 使用, 启动之后, 在界面上可以看到连接到开发机器上的设备列表,选中设备, 就可以看到在设备上运行的程序, 可以使用它进行调试和对 UI 进行优化。
 
(3) 使用 TraceView
    TraceView 是一个用于优化性能的工具, 要使用该工具, 必须在应用中实现 Debug 类, 它创建包含跟踪信息的日志文件以用于分析。
     下面给出一个使用实例。
  1. import android.app.Activity;
  2. import android.os.Bundle;
  3. import android.os.Debug;

  4. public class TestFactorial extends Activity {
  5.    public final String tag = "testfactorial";
  6.    @Override
  7.    public void onCreate(Bundle savedInstanceState) {
  8.       super.onCreate(savedInstanceState);
  9.       setContentView(R.layout.main);
  10.       factorial(10);
  11.    }

  12.    public int factorial(int n) {
  13.       Debug.startMethodTracing(tag);
  14.       int result = 1;
  15.       for (int i=1; i<=n; ++i) {
  16.          result *= i;
  17.       }
  18.       Debug.stopMethodTracing();
  19.       return result;
  20.    }
  21. }
 
   factorial() 方法含有对 Debug 类的两次调用, 跟踪是在startMethodTracing()方法调用的使用建立的, 当stopMethodTracing()调用的时候, 系统继续缓存产生的跟踪数据, 当factorial()函数返回后, 跟踪文件就会产生名为 testfactorial.trace的日志文件, 保存到/sdcard/. 之后, 你就可以使用命令把它取出来:
    > adb pull /sdcard/testfactorial.trace
    取出文件之后就可以使用 traceview 工具分析该文件了
    > traceview testfactorial.trace
    运行了脚本命令之后, 它会产生一个分析报告, 可以用于优化你的代码了。
   
(未完待续)
 
 
 
 
 
 
 
 
 
阅读(4328) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~