Android 调试工具集【转】

简介: 1.TraceView1)功能:用于热点分析和性能优化,分析每个函数占用的CPU时间,调用次数,函数调用关系等  2)方法:   a)在程序代码中加入追踪开关   import android.os.

1.TraceView
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文件时会报错


2.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层的内存占用信息


3.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中打印信息


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

 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文件都很大,注意用完马上删除,以免占满存储器


5.logcat及原理

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

 2)dalvik利用管道加线程的方式,先利用dup2把stdout和stderr重定向到管理中(vm/StdioConverter.c:dvmstdioConverterStartup),然后再启动一个线程从管道另一端读出内容(dalvik/vm/StdioConverter.c:stdioconverterThreadSt art()),使用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显示事件缓冲区中的信息


6.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方式


7.monkey

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

 2)方法

  在设备端打开setting界面

  $ adb shell 
   # monkey -p com.android.settings -v 500

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


8.其它小工具

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

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

  threadCpuTimeNanos()

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

  startAllocCounting()

  stopAllocCounting()

  getGlobalAllocCount()

  get…..

 3)打印当前已load的class

  getLoadedClassCount()

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


9.打印debug信息

  $ adb bugreport

技术改变世界! --狂诗绝剑
目录
相关文章
|
9月前
|
传感器 监控 Linux
Android i2cdetect i2cdump i2cget i2cset调试工具使用
Android i2cdetect i2cdump i2cget i2cset调试工具使用
581 0
|
Shell Linux Android开发
Android强大的原生调试工具adb的常用命令
Android强大的原生调试工具adb的常用命令
|
Android开发 异构计算
【Android 性能优化】布局渲染优化 ( 过渡绘制 | 自定义控件过渡绘制 | 布局文件层次深 | GPU 过渡绘制调试工具 | 背景过度绘制 )(二)
【Android 性能优化】布局渲染优化 ( 过渡绘制 | 自定义控件过渡绘制 | 布局文件层次深 | GPU 过渡绘制调试工具 | 背景过度绘制 )(二)
213 0
|
前端开发 Android开发 开发者
【Android 性能优化】布局渲染优化 ( 过渡绘制 | 自定义控件过渡绘制 | 布局文件层次深 | GPU 过渡绘制调试工具 | 背景过度绘制 )(一)
【Android 性能优化】布局渲染优化 ( 过渡绘制 | 自定义控件过渡绘制 | 布局文件层次深 | GPU 过渡绘制调试工具 | 背景过度绘制 )(一)
393 0
【Android 性能优化】布局渲染优化 ( 过渡绘制 | 自定义控件过渡绘制 | 布局文件层次深 | GPU 过渡绘制调试工具 | 背景过度绘制 )(一)
|
API Android开发 图形学
推荐一款强大的 Android OpenGL ES 调试工具
GAPID (Graphics API Debugger)是 Google 的一款开源且跨平台的图形开发调试工具,用于记录和检查应用程序对图形驱动程序的调用,支持 OpenGL ES 和 Vulkan 调试。
844 0
|
Web App开发 Linux Android开发
Android 调试工具集合
Vysor 提供Windows、Mac、Linux和chrome插件,在电脑屏幕上可操作手机. Robolectric 可以在test文件夹下直接操作Android中的UI控件,方便调试。
889 0
|
Shell Android开发 开发者
|
Web App开发 监控 Android开发
【Android 开发入门】Android设备监视器之调试工具DDMS使用初探
Android Studio提供了一个很实用的工具Android设备监视器(Android device monitor),该监视器中最常用的一个工具就是DDMS(Dalvik Debug Monitor Service),是 Android 开发环境中的Dalvik虚拟机调试监控服务。
1702 0

热门文章

最新文章

  • 1
    如何修复 Android 和 Windows 不支持视频编解码器的问题?
  • 2
    Android历史版本与APK文件结构
  • 3
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 4
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
  • 5
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
  • 6
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
  • 7
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 8
    Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
  • 9
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 10
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 1
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    24
  • 2
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    32
  • 3
    Android历史版本与APK文件结构
    120
  • 4
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    27
  • 5
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    23
  • 6
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
    56
  • 7
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    37
  • 8
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
    73
  • 9
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    118
  • 10
    Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
    29