Android 调试工具用法详细介绍

本文主要为大家讲解多种Android调试工具的用法。

   1. 查看当前堆栈

1)功能:在程序中加入代码,使可以在logcat中看到打印出的当前函数调用关系。

2)方法:

new Exception(“print trace”).printStackTrace();

       2. MethodTracing

1)功能:用于热点分析和性能优化,分析每个函数占用的CPU时间,调用次数,函数调用关系等。

2)方法:

       a)在程序代码中加入追踪开关:

import android.os.Debug;
……
android.os.Debug.startMethodTracing(“/data/tmp/test”); // 先建/data/tmp目录
…… // 被追踪的程序段
android.os.Debug.stopMethodTracing();

  b)编译,运行后,设备端生成/data/tmp/test.trace文件。

       c)把trace文件复制到PC端

$ adb pull /data/tmp/test.trace ./

     d)使用android自带工具分析trace文件

$ $ANDROID_SRC/out/host/linux-x86/bin/traceview test.trace

此时可看到各个函数被调用的次数CPU占用率等信息。

       e)使用android自带工具分析生成调用关系类图

$ apt-get install graphviz # 安装图片相关软件

$ANDROID_SRC/out/host/linux-x86/bin/dmtracedump -g test.png test.trace

此时目录下生成类图test.png

3)注意

trace文件生成与libdvm模块DEBUG版本相冲突,所以此方法只适用于对非DEBUG版本模拟器的调试,否则在分析trace文件时会报错。

       3. HProf (Heap Profile)

1)功能:

用于java层面的内存分析,显示详细的内存占用信息,指出可疑的内存泄漏对象。

2)方法:

a)在代码中加入dump动作:

import android.os.Debug;
import java.io.IOException;
……
try {
android.os.Debug.dumpHprofData(“/data/tmp/input.hprof”); // 先建/data/tmp目录
} catch (IOException ioe) {
}

b)把hprof文件复制到PC端

$ adb pull /data/tmp/input.hprof ./

c)使用命令hprof-conv把hprof转成MAT识别的标准的hprof

$ $ANDROID_SRC/out/host/linux-x86/bin/hprof-conv input.hprof output.hprof

d)使用MAT工具看hprof信息

下载MAT工具:http://www.eclipse.org/mat/downloads.php

用工具打开output.hprof

3)注意:此工具只能显示java层面的,而不能显示C层的内存占用信息。

  4. SamplingProfile(android 2.0上版本使用)

1)功能

每隔N毫秒对当前正在运行的函数取样,并输出到log中。

2)在代码中加入取样设定:

import dalvik.system.SamplingProfiler
……
SamplingProfile sp = SamplingProfiler.getInstance();
sp.start(n); // n为设定每秒采样次数
sp.logSnapshot(sp.snapshot());
 ……
sp.shutDown();

它会启一个线程监测,在logcat中打印信息。

       5. 用发系统信号的方式取当前堆栈情况和内存信息

1)原理

dalvik虚拟机对SIGQUIT和SIGUSR1信号进行处理(dalvik/vm/SignalCatcher.c),分别完成取当前堆栈和取当前内存情况的功能。

2)用法

a)$ chmod 777 /data/anr -R # 把anr目录权限设为可写

$ rm /data/anr/traces.txt # 删除之前的trace信息

$ ps # 找到进程号

$ kill -3 进程号 # 发送SIGQUIT信号给该进程,此时生成trace信息

$ cat /data/anr/traces.txt

功能实现:遍历thread list(dalvik/vm/Thread.c:dvmDumpAllThreadEx()),并打印当前函数调用关系(dalvik/vm/interp/Stack.c:dumpFrames())

     b)$ chmod 777 /data/misc -R

$ ps # 找到进程号

$ kill -10 进程号 # 发送SIGQUIT信事信号给该进程,此时生成hprof信息

$ ls /data/misc/*.hprof

此时生成hprf文件,如何使用此文件,见第二部分(HProf)

注意:hprof文件都很大,注意用完马上删除,以免占满存储器。

       6. logcat及原理

1)android.util.Log利用println的标准java输出词句,并加前缀I/V/D….

2)dalvik利用管道加线程的方式,先利用dup2把stdout和stderr重定向到管理中

(vm/StdioConverter.c:dvmstdioConverterStartup),然后再启动一个线程从管道另一端读出内容(dalvik/vm/StdioConverter.c:stdioconverterThreadStart()),使用LOG公共工具(system/core/liblog/logd_write.c: __android_log_print())输出到/dev/log/*中去。

3)logcat通过加不同参数看/dev/log/下的不同输入信息

# logcat -b main 显示主缓冲区中的信息

# logcat -b radio 显示无线缓冲区中的信息

# logcat -b events 显示事件缓冲区中的信息

       7. jdwp(java debug wire protocol)及原理

1)虚拟机(设备端)在启动时加载了Agent JDWP 从而具备了调试功能。在调试器端(PC端)通过JDWP协议与设备连接,通过发送命令来获取的状态和控制Java程序的执行。JDWP 是通过命令(command)和回复(reply)进行通信的。

2)JDK 中调试工具 jdb 就是一个调试器,DDMS也提供调试器与设备相连。

3)dalvik为JDWP提供了两种连接方式:tcp方式和adb方式,tcp方式可以手工指定端口,adb方式自动设定为8700端口,通常使用DDMS调试就是通过adb方式。

       8. monkey

1)monkey是一个android自带的命令行工具。它向系统发送伪随机的用户事件流,实现对正在开发的应用程序进行压力测试。

2)方法

在设备端打开setting界面

$ adb shell

# monkey -p com.android.settings -v 500

此时可以看到界面不断被切换。

       9. 其它小工具

具体见android.os.Debug中提供的工具。

1)取毫微秒级的时间,用于计算时间

threadCpuTimeNanos()

2)统计两点间的内存分配情况:

startAllocCounting()
stopAllocCounting()
getGlobalAllocCount()
get…..

3)打印当前已load的class

getLoadedClassCount()

printLoadedClasses() 它需要打开NDEBUG功能才能打开system/core/中Log功能

       10. 打印debug信息  

$ adb bugreport

以上就是对Android 调试工具的资料整理,后续继续补充相关知识,谢谢大家对本站的支持!

(0)

相关推荐

  • android调试工具adb命令大全

    一.adb介绍SDK的Tools文件夹下包含着Android模拟器操作的重要命令adb,adb的全称为(Android Debug Bridge就是调试桥的作用.通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序.借助这个工具,我们可以管理设备或手机模拟器的状态.还可以进行以下的操作: 1.快速更新设备或手机模拟器中的代码,如应用或Android 系统升级: 2.在设备上运行shell命令: 3.管理设备或手机模拟器上的预定端口: 4.在设备或手机模拟器上复制或粘贴文件

  • android真机调试时无法显示logcat信息的解决方法介绍

    android真机调试时无法显示logcat信息的解决方法介绍: window-->show view-->android->devices, 打开devices,点击右边的截屏图片的按钮.等到出现截图的时候,logcat就出来信息了!

  • Android笔记之:App调试的几个命令的实践与分析

    在Android的应用开发中,我们会用到各种代码调试:其实在Android的开发之后,我们可能会碰到一些随机的问题,如cpu过高,内存泄露等,我们无法简单的进行代码调试,我们需要一个系统日志等等,下面我把握工作中碰到的几个常用命令和方法给大家演示实践一下. 1.logcat命令这个命令最简单常用,可查看帮助,我不多说,如果需要打印时间,加参数-v time adb logcat -v time 2.bugreport命令这个命令也非常简单,但是在实际应用中非常有用,会有从开机之后详细的dumps

  • ubuntu用wifi连接android调试程序的步骤

    注:如果没有 root 权限也是可以试试,一般情况下,都需要 root 权限,才能连接成功. 1.需要确保你的开发 PC 和 Android 手机都连上了 wifi 并处于同一网段下:2.开启 usb 调试,且用 usb 将 Android 设备连接到开发 PC 上:3.进入到你的 Android SDK 的 platform-tools 目录下,执行如下命令来重启 Android 设备中的 adbd 后台程序重新侦听 TCP 的指定端口:$./adb tcpip 5555注:5555 是默认端

  • Android App调试内存泄露之Cursor篇

    最近在工作中处理了一些内存泄露的问题,在这个过程中我尤其发现了一些基本的问题反而忽略导致内存泄露,比如静态变量,cursor关闭,线程,定时器,反注册,bitmap等等,我稍微统计并总结了一下,当然了,这些问题这么说起来比较笼统,接下来我会根据问题,把一些实例代码贴出来,一步一步分析,在具体的场景下,用行之有效的方法,找出泄露的根本原因,并给出解决方案. 现在,就从cursor关闭的问题开始把,谁都知道cursor要关闭,但是往往相反,人们却常常忘记关闭,因为真正的应用场景可能并非理想化的简单.

  • Android 源码如何编译调试

    android提供的工具链和开发工具比较完善,因此它的开发环境的搭建比较简单,相信许多朋友都已经搭建好环境,并编写了HelloActivity入门程序了.这里先看几个问题: 1.android的文件系统结构是怎样的,我们安装的程序放在那里? 编译android源码之后,在out/target/product/generic一些文件: ramdisk.img.system.img.userdata.img. system. data.root 其中, system.img是由 system打包压缩

  • Android将应用调试log信息保存在SD卡的方法

    把自己应用的调试信息写入到SD卡中. package com.sdmc.hotel.util; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import android.co

  • Android开发笔记之:一分钟学会使用Logcat调试程序的详解

    这是个很简单的问题,但每次隔一段时间后使用起来总是会出点乱子.这里记录下Logcat的步骤:1,在Activity里申明tag变量(名字其实是随便的,如下:private static final String tag="yan";2,需要使用logcat输出信息时:Log.i(tag, "屏幕宽度:"+display.getWidth()+" 屏幕高度:"+display.getHeight());3, 双击Logcat,点击"+&q

  • 简单实用的Android studio 调试技巧

    说到android studio的调试,很多人可能会说,这有什么可讲的不就是一个断点调试么,刚开始我也是这么认为的,直到我了解之后,才发现,调试原来可以玩的这么牛.下面我分别一一做介绍. 条件断点(Conditional Breakpoints) 这个调试模式是我最喜欢的,简直不能再方便了,以前遇到在循环里面打断点,需要看某个条件下的值,我只能一遍遍点击,直到满足条件. 那么这个条件断点改怎么用呢,在你的断点上点击右键,就会弹出一个选择对话框,在里面的condition框里面填写上你所需要中断的

  • 通过WIFI(不用数据线)连接Android手机调试

    Android开发中少不了真机调试,总用数据线插插拔拔的还是不方便也不稳定,其实可以实现WIFI的方式连接android手机. 1. 当然首先要打开WIFI,手机要和电脑在同一局域网内. 2. 在手机上安装AdbWireless(Google Play上需搜一下就有),注意手机是需要root过的. 3. 安装完毕后在手机上启动AdbWireless,按屏幕中央的大按钮激活无线连接: 如何通过WIFI连接(不用数据线)Android手机调试 4. 按照屏幕提示,在电脑上从Android SDK\p

  • 使用Chrome浏览器调试Android App详解

    个人一直对Chrome情有独钟,Chrome除了更快之外,对开发者的支持更友好.内置强大的Developer Tools,相信Web开发简直爱不释手!而且Chrome Store里提供各种各样的插件,没有你用不到,只有你想不到.现在任何事基本Chrome全部办的到,有时候就在想,如果可以用Chrome调试Android App该多方便,而如今Facebook刚刚开源了一个工具Stetho,从此Chrome调试Android不再是梦. 调试工具 在Android开发中除了一些官方自带的一些调试工具

  • android调试工具DDMS的使用详解

    具体可见http://developer.android.com/tools/debugging/ddms.html. DDMS为IDE和emultor.真正的android设备架起来了一座桥梁.开发人员可以通过DDMS看到目标机器上运行的进程/现成状态,可以 android的屏幕到开发机上,可以看进程的heap信息,可以查看logcat信息,可以查看进程分配内存情况,可以像目标机发送短信以及打电话,可 以像android开发发送地理位置信息.可以像gdb一样attach某一个进程调试. SDK

  • Android 开发调试工具的使用总结

     Android 调试工具,这里做一个总结整理. DDMS --  Dalvik debug monitor service    调试监控服务 对模拟器进行相关配置. ADB进程   Android debug bridge  建立eclipse和Android设备之间的连接 cmd 进入dos界面,进行adb指令操作. adb start-server:启动adb进程 adb kill-server:杀死adb进程 adb devices:查看当前与开发环境连接的设备,此命令也可以启动adb

  • android开发教程之ubuntu使用adb连接小米2的步骤和adb调试方法

    步骤:分两步 一.usb连接: 在Ubuntu挂载使用MTP设备步骤如下: 1.将MTP设备连接至PC机 2.如果是第一次使用MTP设备需要安装以下软件,否则可以跳过此步骤: 复制代码 代码如下: $ sudo apt-get install mtpfs libfuse-dev libmad0-dev 3.挂载MTP设备 复制代码 代码如下: $ sudo mtpfs -o allow_other /media/mtp 如果提示设备忙,可以等一会再挂载. 二.adb调试: 复制代码 代码如下:

随机推荐