• Debug Android Application


    Logcat

    Dump一份系统消息的日志。这些消息包括模拟器抛出错误时的堆栈跟踪。

    Android Log

    一个记录日志的类,用来将消息写入模拟器上的日志文件中。如果你在DDMS上运行logcat的话你可以就实时查看消息。在你的代码中加入几个写日志方法的调用。
    为了使用Log类,你只需要调用Log.v()(详细),Log.d()(debug),Log.i()(information),Log.w()(warning) 或者 Log.e()(error),根据你想获得的日志信息来选择相应的方法

    Log.i("MyActivity", "MyClass.getView() — Requesting item number " + position)
    你可以用logcat来读取这些信息

    Traceview

    Android可以保存一个日志用来记录被调用的方法以及该方法被调用的次数,通过Traceview你可以在一个图形化的界面中查看这个日志文件。

    adb

    Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器的状态。

    发出Android命令: 你可以在你的开发机上的命令行或脚本上发布Android命令,使用方法:

    adb [-d|-e|-s <serialNumber>] <command>

    进入Shell:adb shell

    查询模拟器/设备实例
    adb devices 列出模拟器的序列号和状态

    给特定的模拟器/设备实例发送命令
    如果有多个模拟器/设备实例在运行,在发布adb命令时需要指定一个目标实例。 这样做,请使用-s 选项的命令。在使用的-s 选项是
    adb -s <serialNumber> <command>
    如:db -s emulator-5556 install helloWorld.apk

    安装软件:
    adb install <path_to_apk>

    从模拟器/设备中拷入或拷出文件
    可以使用adbpull ,push 命令将文件复制到一个模拟器/设备实例的数据文件或是从数据文件中复制。install 命令只将一个.apk文件复制到一个特定的位置,与其不同的是,pull 和 push 命令可令你复制任意的目录和文件到一个模拟器/设备实例的任何位置。
    从模拟器或者设备中复制文件或目录,使用(如下命):
    adb pull <remote> <local>
    将文件或目录复制到模拟器或者设备,使用(如下命令)
    adb push <local> <remote>
    在这些命令中, <local> 和<remote> 分别指通向自己的发展机(本地)和模拟器/设备实例(远程)上的目标文件/目录的路径
    下面是一个例子::
    adb push foo.txt /sdcard/foo.txt

    查询日志 adb logcat

    Stopping the adb Server
    在某些情况下,你可能需要终止Android 调试系统的运行,然后再重新启动它。 例如,如果Android 调试系统不响应命令,你可以先终止服务器然后再重启,这样就可能解决这个问题.
    用kill-server 可以终止adb server。你可以用adb发出start-server命令来重新启动服务器.

    设备上调试和测试的设置

    Android提供了众多的设置使你可以更容易的调试和测试程序。要进入开发设置页面,在模拟器中转到Dev Tools > Development Settings。在该设置页面有以下选项:

    • Debug app:选择要调试的程序。你不需要设定其关联至调试器,但是设定这个值有两个效果:
      • 在调试的时候,如果你在一个断点处暂停了过长的时间,这个设定会防止Android抛出一个错误
      • 这个设定使你可以选择“等待调试器”选项,使程序只有在调试器关联上之后才启动
    • Wait for Debugger:阻塞所选的程序的加载直到有调试器关联上,这样你就可以在onCreate()中设置断点,这对于调试一个Activity的启动进程是非常重要的。当你对该选项进行了更改,任何正在运行的程序的实例都会被终止。你只有在上面的选项中选择了一个调试程序才能够选中该选项。你也可以在代码中添加waitForDebugger()来实现同样的功能。
    • Immediately destroy activities:告诉系统一旦一个activity停止了就销毁该activity(例如当Android释放内存的时候)。这对于测试代码onFreeze(Bundle)/onCreate(android.os.Bundle)是非常有用的,否则会比较困难。如果你的程序没有保存状态,那么选择这个选项很可能会引发很多问题。
    • Show screen updates:对于任何正在被重绘的screen sections都会在其上闪现一个粉红色的矩形。这对于发现不必要的screen绘制是很有必要的。
    • Show CPU usage:在屏幕上方显示CPU信息,显示有多少CPU资源正在被使用。上方红色条显示总的CPU使用率,它下方绿色的条显示CPU用在compositing the screen上的时间。注意:在没有重启模拟器之前,一旦你开启了该功能就不能关闭。
    • Show screen FPS:显示当前的帧率。这对于查看游戏达到的总的帧率是非常有用的。注意:在没有重启模拟器之前,一旦你开启了该功能就不能关闭。
    • Show background:当没有activity screens可见时,显示一个背景模式。一般是不会出现的,仅仅在Debug的时候会出现。

    设定的选项在模拟器重启之后仍然有效,如果要取消设定的选项,在取消设定以后还要重启模拟器,才能生效。

    重要的调试小提示

    快速的堆栈dump

    要在模拟器上获得一个堆栈dump,你可以通过adb shell登入,用“ps”找到你想要的进程,然后“kill -3”,
    堆栈跟踪信息就会记录到日志文件中了。
    

    在模拟器屏幕上显示有用信息

    设备上可以显示诸如CPU利用率或者对重绘区域的边缘高亮显示等有用信息,在开发设置窗口可以打开或者关闭这些功能。
    

    从模拟器上获取系统状态信息(dumpstate)

    你可以通过Dalvik Debug Monitor Service工具来获得dumpstate信息。

    从模拟器上获取程序状态信息(dumpsys)

    你可以通过Dalvik Debug Monitor Service工具来获得dumpsys信息。

    获取无线连接信息

    你可以通过Dalvik Debug Monitor Service工具来获得无线连接信息。在Device菜单,选择“Dump radio state”
    

    日志记录跟踪数据

    你可以在一个activity中通过调用android.os.Debug.startMethodTracing()来用日志来记录方法调用和其他跟踪数据。
    

    日志记录Radio Data

    默认情况下,radio信息是不会记录在系统中的(因为数据量巨大)。然而,你可以通过下面的命令来开启radio记录
    adb shell
    logcat -b radio
    

    运行adb

    Andoid中自带了一个叫adb的工具,该工具功能强大,可以移动并同步文件到模拟器,转发端口。在模拟器上运行一个UNIX shell。

    从模拟器上获取屏幕截图

    Dalvik Debug Monitor Server (DDMS)可以从模拟器上获取屏幕截图
    

    利用调试帮助类

         Android为了开发者的方便提供了诸如util.LogDebug等帮助类

    命令行运行程序的方法

    参考:http://www.javaeye.com/topic/201856  http://www.javaeye.com/topic/149227

    进入shell 

    引用
    C:\Documents and Settings\mawenjian>adb shell

    看一下命令的帮助 
    引用

    # am -help 
    am -help 
    Error: Unknown command: -help 
    usage: am [start|instrument] 
           am start [-a <ACTION>] [-d <DATA_URI>] [-t <MIME_TYPE>] 
                    [-c <CATEGORY> [-c <CATEGORY>] ...] 
                    [-e <EXTRA_KEY> <EXTRA_VALUE> [-e <EXTRA_KEY> <EXTRA_VALUE> ...] 
                    [-n <COMPONENT>] [-D] [<URI>] 
           am instrument [-e <ARG_NAME> <ARG_VALUE>] [-p <PROF_FILE>] 
                    [-w] <COMPONENT>

    好了,试一下启动浏览器 
    引用
    # am start -n com.google.android.browser/com.google.android.browser.BrowserActivity 
    am start -n com.google.android.browser/com.google.android.browser.BrowserActivity 
    Starting: Intent { comp={com.google.android.browser/com.google.android.browser.BrowserActivity} }

    ok,成功了 
    大家试试下面的命令吧: 
    引用

    # am start -a android.intent.action.VIEW -d http://mwjian.javaeye.com 
    am start -a android.intent.action.VIEW -d http://mwjian.javaeye.com 
    Starting: Intent { action=android.intent.action.VIEW data=http://mwjian.javaeye.com } 

    # am start -a android.intent.action.CALL -d tel:88888888 
    am start -a android.intent.action.CALL -d tel:88888888 
    Starting: Intent { action=android.intent.action.CALL data=tel:88888888 } 

    # am start -a android.intent.action.ALL_APPS 
    am start -a android.intent.action.ALL_APPS 
    Starting: Intent { action=android.intent.action.ALL_APPS } 

    # am start -a android.intent.action.VIEW geo:0,0?q=shanghai 
    am start -a android.intent.action.VIEW geo:0,0?q=shanghai 
    Starting: Intent { action=android.intent.action.VIEW data=geo:0,0?q=shanghai }
  • 相关阅读:
    luogu 1865 数论 线性素数筛法
    洛谷 2921 记忆化搜索 tarjan 基环外向树
    洛谷 1052 dp 状态压缩
    洛谷 1156 dp
    洛谷 1063 dp 区间dp
    洛谷 2409 dp 月赛题目
    洛谷1199 简单博弈 贪心
    洛谷1417 烹调方案 dp 贪心
    洛谷1387 二维dp 不是特别简略的题解 智商题
    2016 10 28考试 dp 乱搞 树状数组
  • 原文地址:https://www.cnblogs.com/yefengmeander/p/2887568.html
Copyright © 2020-2023  润新知