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

在Android的应用开发中,我们会用到各种代码调试;其实在Android的开发之后,我们可能会碰到一些随机的问题,如cpu过高,内存泄露等,我们无法简单的进行代码调试,我们需要一个系统日志等等,下面我把握工作中碰到的几个常用命令和方法给大家演示实践一下。

1.logcat命令
这个命令最简单常用,可查看帮助,我不多说,如果需要打印时间,加参数-v time

adb logcat -v time

2.bugreport命令
这个命令也非常简单,但是在实际应用中非常有用,会有从开机之后详细的dumpsys,dumpstate和logcat信息,是一份完整的日志记录。对分析用户行为,异常信息,系统状态有很大的参考作用。一般我们会把bugreport导出到电脑上分析。

adb bugreport > xxx.log

我再次强调,bugreport里面包含丰富的系统和用户信息,它是其他很多命令输出的结果的记录,非常有用。

3.dumpsys命令
这个查看系统信息,用的还是比较多的.

复制代码 代码如下:

dumpsys [options]
               meminfo 显示内存信息
               cpuinfo 显示CPU信息
               account 显示accounts信息
               activity 显示所有的activities的信息
               window 显示键盘,窗口和它们的关系
               wifi 显示wifi信息

例如查看某个程序内存信息:

复制代码 代码如下:

#查看应用com.tianxia.test的内存使用情况
adb shell dumpsys meminfo com.tianxia.test

效果图如下:

里面的信息很有价值,尤其对于分析内存泄露,内存溢出都有极大的作用。

4.top命令
这个查看cpu信息太方便了。

top -m 5 -t

我们看看效果图,其中按cpu大小列出5个进程列表。

com.tianxia.test的cpu过高,会导致手机发烫。同时利用这个信息,可以监控应用cpu的使用,以调整优化代码。

5.配置文件local.prop
目前网上没有查到local.prop的配置使用,工作中本人只使用过如下:

log.tag.SQLiteStatements=VERBOSE log.tag.SQLiteTime=VERBOSE

把上述文本加到/data/local.prop中,如果没有这个文件自行创建。然后重启手机,就能看到每个应用详细的查询数据库的sql语句信息,对于调试数据库,分析和优化数据库sql异常非常有用。

6.分析手机发烫
下面我们来实践一个例子,手机发烫太厉害,怎么找出问题?
首先我们写一个程序com.tianxia.test,死循环,核心代码如下:

复制代码 代码如下:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    while(true) {
        System.currentTimeMillis();
    }
}

这个应用打开后会一直获取系统时间,因为在主线程,肯定导致应用ANR,也会一直浪费系统cpu,手机发热,我们运行它。
假设我们不知道上述代码,我们来找到这个问题:
(1).找到发烫的应用。
使用top命令:

top -m 5 -t

一看是com.tianxia.test占用85%的cpu,原来是这家伙在捣鬼。进程ID是644,这个后面我们有用。
(2).分析发烫的应用进程在干嘛
需要用到linux下的strace命令,但是android是没有集成这个命令的,android版本的下载地址:
http://benno.id.au/android/strace
下载完成后,上传到手机中:
我们adb push strace /system/bin,在模拟器上是上传到/system/bin会报out of memory错误,我们也可以上传到/data目录下,如果没有执行权限,还需要chmod 777 strace.
strace命令有很多参数,直接执行strace会显示使用说明:


其中-p参数输入的就是进程号,第一步中我们找到com.tianxia.test的进程ID是644,我们看看这个应用占用这么高的cpu在干嘛?

strace -p 644

输出如下:


它的系统调用一直是gettimeofday,一直输出这个,显然哪里一定进入死循环了,而且是获取时间的死循环,然后结合logcat和代码,定位这段代码(就是前面我们给出的那段代码了)解决这个bug。

7.采集手机的cpu运行情况.
有时使用日志我们很难针对性的获取我们想要的信息,我们可能需要写一些最简单的脚步放在手机里面执行。
如监控cpu占用的记录cpu_log.sh:

复制代码 代码如下:

# !/system/bin/sh
#这个脚步比较粗糙,是这么个意思
file=/sdcard/cpu/cpu_info.log
rm $file
until [ 1 -gt 10000 ]
do
echo -e "\n\n\n\n\n---------------">>$file
date >> $file
top -m 5 -n 1 >> $file
sleep 3
done

每隔3s中就会把手机的cpu的信息写到sdcard的cpu目录下的cpu_info.log文件中,方便我们后续分析。
 ps:使用方法是 push到data目录下,赋予可执行权限,在shell下执行即可。

8.采集某个应用的内存数据
这个实践和上面的脚本类似,只是命令不一样我另外单独列出来,因为这个有时候很有用。
比如,我们要采集com.tianxia.test的内存使用情况,分析它是不是会内存泄露,脚步类似:

复制代码 代码如下:

# !/system/bin/sh
#这个脚步比较粗糙,是这么个意思
file=/sdcard/cpu/mem_info.log
rm $file
until [ 1 -gt 10000 ]
do
echo -e "\n\n\n\n\n---------------">>$file
date >> $file
dumpsys meminfo com.tianxia.test >> $file
sleep 3
done

使用方法也是一样。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
App调试命令
,以便于您获取更多的相关知识。

时间: 2024-10-02 00:59:21

Android笔记之:App调试的几个命令的实践与分析_Android的相关文章

Android笔记之:App应用之发布各广告平台版本的详解_Android

Android的广告平台是很多的,各市场对各平台的接受程度是不一样的,Android的开发者如果想集成广告基本要考虑下面两个问题:(1)集成什么广告,会赚钱?(2)集成什么广告,不会被市场拒绝?最终的结果往往是折中的.第一个问题是广告平台的判断问题,我没有发言权去评论,本文主要是针对第二个问题展开.解决方案就是打包应用的不同广告平台版本,本文接下来逐一展开相关话题. 1. 基础本文其实是针对<Android笔记之:App模块化及工程扩展的应用>和<Android笔记之:App自动化之使用

Android笔记之:App自动化之使用Ant编译项目多渠道打包的使用详解_Android

随着工程越来越复杂,项目越来越多,以及平台的迁移(我最近就迁了2回),还有各大市场的发布,自动化编译android项目的需求越来越强烈,后面如果考虑做持续集成的话,会更加强烈.    经过不断的尝试,在ubuntu环境下,以花界为例,我将一步一步演示如何使用命令行,使用ant编译android项目,打包多渠道APK.    要点:    (1). 编译android的命令使用    (2). ant基本应用    (3). 多项目如何编译(包含android library)    (4). 如

Android笔记之:App应用之启动界面SplashActivity的使用_Android

当前比较成熟一点的应用基本上都会在进入应用之显示一个启动界面.这个启动界面或简单,或复杂,或简陋,或华丽,用意不同,风格也不同.下面来观摩几个流行的应用的启动界面. 1. 货比三家以腾讯qq,新浪weibo,UC浏览器,游戏神庙逃亡等7个应用为例,比比看:(我认为最精美的界面应该是qq2012,虽然只有一张图,基本的应用名称,版本,图标这些信息都有,但是看着舒服,觉得美.) 2. 元素启动界面的本意是以友好用户界面来掩饰后台缓冲加载,让用户用平和等待的心情进入正常应用界面.但是因为启动界面是放在

Android笔记之:App模块化及工程扩展的应用_Android

1.需求    无论是在.net还是java平台,合理的分层架构是最普遍的模块化思路之一.    dll,jar文件无不风靡盛行,无处不在.    一天,tx团队和我说,我们现在要做android上做三个论坛的客户端,一个是新闻论坛,一个是文学论坛,一个是音乐论坛.除了数据,界面和很少的模块不一样,其他的都一摸一样.    jar是我第一刻就想到的东西,但是共用的jar文件无法方便的共享资源或者覆盖资源.    而我们也不会傻傻的单独做三个客户端的吧,也不会傻傻的做3个客户端再傻傻的copy3份

Android笔记之:App列表之下拉刷新的使用_Android

Android的ListView是应用最广的一个组件,功能强大,扩展性灵活(不局限于ListView本身一个类),前面的文章有介绍分组,拖拽,3D立体,游标,圆角,而今天我们要介绍的是另外一个扩展ListView:下拉刷新的ListView.    下拉刷新界面最初流行于iphone应用界面,如图: 列表之下拉刷新的使用_Android-">    然后在Android中也逐渐被应用,比如微博,资讯类.    所以,今天要实现的结果应该也是类似的,先贴出最终完成效果,如下图,接下来我们一步

Android APP启动方式、启动流程及启动优化分析_Android

本文章向大家介绍Android app应用启动的一些相关知识,包括app启动方式.app启动流程和app启动优化等知识!  app应用启动方式 1.冷启动  当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动.冷启动因为系统会重新创建一个新的进程分配给它,所以会先创建和初始化Application类,再创建和初始化MainActivity类(包括一系列的测量.布局.绘制),最后显示在界面上. 2.热启动 当启动应用时,后台已有该应用的进程(例:

Android Activity之间相互调用与传递参数的原理与用法分析_Android

本文实例讲述了Android Activity之间的相互调用与传递参数.分享给大家供大家参考,具体如下: Activity之间是如何调用的 在javaWeb程序中,jsp与jsp之间的调用是通过重定向完成的,而在Android中,Activity与Activity之间的切换是通过Intent来完成的. 所谓Intent,它是Android中非常重要的内置组件,他可以理解为"我要干一件什么事情".在Android中有3大组件:Activity,Service.Broadcast,他们之间

Android学习笔记(二)App工程文件分析_Android

App工程文件分析 关于如何创建一个最简单的Android App请参照链接: < Android学习笔记(一)环境安装及第一个hello world > http://www.jb51.net/article/52593.htm 创建完的工程文件如下图所示,本文对一些主要的文件进行分析. src文件分析 App源文件如图: 打开源文件 MainActivity.java 可看到如下代码: 源码主要功能如下: App源文件目录 package com.example.firstapp; 导入A

Android桌面组件App Widget完整案例_Android

本文实例讲述了Android桌面组件App Widget用法.分享给大家供大家参考.具体如下: 这里模拟一个案例:把AppWidget添加到桌面后,点击AppWidget后AppWidget文本会轮回改变 main.xml布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/a