文档章节

Android学习系列--App调试的几个命令实践

s
 sxl01890
发布于 2016/05/12 21:41
字数 1520
阅读 54
收藏 14

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

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

1

adb logcat -v time

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

1

adb bugreport > xxx.log

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

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

1

2

3

4

5

6

7

dumpsys [options]

               meminfo 显示内存信息

               cpuinfo 显示CPU信息

               account 显示accounts信息

               activity 显示所有的activities的信息

               window 显示键盘,窗口和它们的关系

               wifi 显示wifi信息

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

1

2

#查看应用com.tianxia.test的内存使用情况

adb shell dumpsys meminfo com.tianxia.test

效果图如下:

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

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

1

top -m 5 -t

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

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

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

1

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

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

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

1

2

3

4

5

6

7

8

@Override

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    while(true) {

        System.currentTimeMillis();

    }

}

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

1

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在干嘛?

1

strace -p 644

输出如下:


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

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

1

2

3

4

5

6

7

8

9

10

11

# !/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的内存使用情况,分析它是不是会内存泄露,脚步类似:

1

2

3

4

5

6

7

8

9

10

11

# !/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

使用方法也是一样。

9.小结
零零碎碎的一直没有时间整理,有常用的也有不常用的,算是一些小技巧,感觉网上这方面的分享比较少,有时和朋友们谈起这些调试方法,特别是龙哥,硬是要求我今天写出来与大家分享,只好献丑,说不定对于解决一些疑难杂症有奇效,呵呵,想到什么写什么吧,想到几个写几个,也是一个学习的记录。

本文转载自:http://www.cnblogs.com/qianxudetianxia/archive/2012/05/14/2497073.html

共有 人打赏支持
s
粉丝 3
博文 117
码字总数 55191
作品 0
浦东
Android学习系列(14)--App调试的几个命令实践

在Android的应用开发中,我们会用到各种代码调试;其实在Android的开发之后,我们可能会碰到一些随机的问题,如cpu过高,内存泄露等,我们无法简单的进行代码调试,我们需要一个系统日志等等...

chengche
2013/12/05
0
0
Flutter新锐专家之路:工程研发体系篇

作者:闲鱼技术-正物 写在前面 当前,闲鱼客户端已经实现了基于Flutter的商品详情页的全量重构,线上效果良好。从alpha一路走来,我们遇到了很多问题,或基于原理,或透过社区,或与官方合作...

闲鱼技术
08/06
0
0
React Native在Android当中实践(五)——常见问题

React Native在Android当中实践(一)——背景介绍 React Native在Android当中实践(二)——搭建开发环境 React Native在Android当中实践(三)——集成到Android项目当中 React Native在A...

YangZC
05/28
0
0
Windows环境下Android Studio系列5—日志调试

定制Logcat调试日志字体颜色 Logcat是Android开发调试中最常用的一个工具,Android Studio 1.2.2中默认对Logcat调试的颜色已经有所区分,但如果你想要定制自己的调试日志对应的字体颜色,以便...

一配
2015/07/15
0
1
Android开发学习记录(2015-05-19 23:05:34更新)

占个坑位,日后增加,哈哈 -----------------分割线------------------- 发了以上这篇日志,居然意外的访问量飙升,几小时阅读破百。 真心搞不懂,是不是我这个标题太惹人注意了。真心感觉对...

听_风
2015/05/14
0
6

没有更多内容

加载失败,请刷新页面

加载更多

下一页

bat强制启用宏

运行bat文件后,将宏的安全等级设为低,达到启用宏的目的。 REM 这个文件将提供用户快速设置Excel宏的安全等级@ECHO OFFCLS:cmd4REG ADD "HKEY_CURRENT_USER\Software\Mi...

tedzheng
7分钟前
0
0
流,用声明性的方式处理数据集 - 读《Java 8实战》

引入流 Stream API的代码 声明性 更简洁,更易读 可复合 更灵活 可并行 性能更好 流是什么? 它允许以声明方式处理数据集合 遍历数据集的高级迭代器 透明地并行处理 简短定义:从支持数据处理...

yysue
9分钟前
1
0
postman发送json格式的post请求

postman发送json格式的post请求 在地址栏里输入请求url:http://127.0.0.1:8081/getmoney 选择“POST”方式, 在“headers”添加key:Content-Type , value:application/json 点击"body",''ra...

两广总督bogang
16分钟前
0
0
Javascript将html转成pdf,下载(html2canvas 和 jsPDF)

最近碰到个需求,需要把当前页面生成pdf,并下载。弄了几天,自己整理整理,记录下来,我觉得应该会有人需要 :) 项目源码地址:https://github.com/linwalker/render-html-to-pdf html2ca...

孟飞阳
16分钟前
0
0
pureftp源码编译及设定

--- use for RHEL 567 and Ubuntu 1604 1. download pureftpd wget http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.47.tar.bz2 2. install gcc #apt-get install -y li......

zzimac
18分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部