《Android编程权威指南》之Android应用调试篇

处理应用的bug,这是每个程序员的基本功,实际项目中天天都有各式各样的bug,因此学会如何使用Logcat、Android Lint以及Android Studio内置的调试器就非常有必要啦。

异常与栈跟踪

写代码嘛,一个不注意就把程序写奔啦,不用担心,展开Android DDMS工具窗口。上下滑动LogCat窗口滚动条,就能看到整片红色的异常或错误信息。若看不到,可尝试选择LogCat的No Filters过滤器项。还有可以调整Log Level位Error,让系统只输出严重问题日志。

如图,随意写个空指针错误,LogCat就打印出了异常报告,告诉我们异常及其栈追踪,我们可以从异常语句直接跳转到源代码出错的对应行上,找出奔溃原因,加以修正。


Demo截图

如果发生应用崩溃的设备没有与计算机连接,日志信息也不会全部丢失。设备会将最近的日志保存到日志文件中(保存时间取决具体设备,一般十分钟之内有保证)。

记录栈跟踪日志

这个方式就是打印日志了,因为有的时候代码出现问题,不一定就会造成奔溃了,就可以在需要的地方,利用Log.d(...)方式来打印相应的信息,来检查方法是否正常调用,并且数据值是否跟预计一致了。大量的日志输出也容易导致LogCat窗口信息混乱难读,因此可以在查看的时候也可以过滤掉一些暂时不需要查看的日志,或者直接选择TAG,就只打印某一些log日志了。

Demo截图
一般项目中都会自行封装一个专门打印Log日志的类,用于控制整个项目的日志输出,github上面有个非常好用的日志输出工具,叫 logger 它打印出来的log是这个样子,很方便实用。

github上截图

地址:https://github.com/orhanobut/logger

设置断点

打断点也是程序员调试程序的常用方法,断点会在断点设置行的前一行代码出停止运行,然后我们可以逐行检查代码,看看接下来到底发生了什么。

Demo截图
像这样在需要打断点的代码那行旁边,点个小红点出来,此时需要调试运行整个项目而不是直接运行,单击run旁边的debug
Demo截图
设备会报告说正在等待调试器加载,然后继续运行。然后从

Demo截图
能看到各种信息,然后就是学习这是视图显示的一些信息是代表什么意思了,还有跳转下一步啊,对断点的各种操作啦什么的。
截图取自此书

有篇文章专门讲了Android Studio一些各种小技巧,当然包含了调试技巧,很棒的文章。

地址:http://jaeger.itscoder.com/android/2016/02/14/android-studio-tips.html

小结一句:打印Log日志的优点是,在同一日志记录中可以看到多处的栈跟踪信息;缺点是,必须学习如何添加日志记录方法,重新编译、运行应用并跟踪排查应用问题。相对而言,断点调试的方法更为方便,当然不同场景下,打印日志会更加清晰、方便寻找解决问题线索,比如说一个循环中。

Android特有的调试工具——Android Lint

Android Lint是Android应用代码的静态分析器,它是无需代码运行就能检查代码错误的的特殊程序,凭着对Android框架知识的掌握,Android Lint深入检查代码,找出编译器无法发现的问题。
选择Analyze -> Inspect Code...菜单项手动运行Lint


Demo截图

选择Whole project。然后Android Studio会立即运行Lint和其他一些静态分析器开始分析代码。
检查完毕,所有的潜在问题会按类别列出。


Demo截图
展开Android Lint类别可看到项目中的具体Lint信息,继续展开看到更加详细的信息,包括问题发生的地方。


R类问题——有时候资源编译错误莫名其妙的出现,若遇到此类问题,可尝试如下操作

  1. 重新检查资源文件中的XML文件的有效性(某个布局的拼写有可能错误,拼写规范要遵守)
  2. 清晰项目(选择Build -> Clean Project,Android Studio会重新编译整个项目,消除错误,建议经常进行深度项目清理)
  3. 使用Gradle同步项目(若修改了build.gradle配置文件,就需要同步更新项目的编译设置。选择Tool -> Android -> Sync Project with Gradle Files菜单项,Android Studio会使用正确的项目设置重新编译项目)
  4. 运行Android Lint(仔细查看Lint警告信息,在项目中也许就能在这个工具的帮助下获得意想不到的发现噢)

如果仍然无法解决问题,那就访问 http://stackoverflow.com 寻求帮助吧 ~ O(∩_∩)O哈哈 ~

挑战练习:探索布局检查器

使用布局检查器以交互的方式检查布局文件,调试布局文件,研究它是如何在屏幕上渲染显示的。启动应用,在Android Monitor工具窗口点击最左边的布局检查器按钮,布局检查器激活后,点击布局检查器视图里的元素查看布局属性。

截图取自此书
实际上我在Android Studio3.0 Logcat旁边没找到这个布局检查器,大概在旧一点的AS版本里面有。看到Lotcat旁边看到一个截图功能,还挺好的。

截图取自demo
我查看布局属性应该直接在XML文件这里不知道算不算,如图,由此可以看到布局属性,布局结构组成。

截图取自demo
好不容易找到了AS3.0 布局检测器,Tools> Android>Layout Inspector

截图取自demo
选择应用
截图取自demo
选择window
截图取自demo
查看自己想查看的布局控件信息,点击中间的控件,左边定位到控件,右边是当前控件的属性表格。

截图取自demo

挑战练习:探索内存分配跟踪

在Android Monitor工具窗口,点击内存分配跟踪器按钮启动它。

截图取自此书
然后在前台操作应用,后台就开始记录内存分配状况。一旦找到想优化的点,就可以再次点击内存分配跟踪器按钮停止。就可以看到内存分配报告。

截图取自此书
内存分配报告会列出内存分配发生的次数以及字节大小。在工具顶端选择你需要的报表类型,报表展现形式可以是表,也可以是图。

然而,AS3.0我也没找到书上的这个内容,不过提供了个强大的 Android Profiler 分析器。

截图取自demo
选择要配置的设备和应用程序进程,单击NETWORK,CPU或MEMORY时间线可以打开每个分析器的更详细视图。

截图取自demo
点击Run Configuration

截图取自demo
截图取自demo
这里显示gradle plugin 的版本至少是2.4,我这项目的plugin是2.2.3,此时并不能很好的体会这个功能的强大。我这最终把项目的build gradle plugin改成了3.0.0

截图取自demo
当然,移植过程中会遇到不少坑,百度还是找的到原因的,我参考的博客:http://blog.csdn.net/qq_34795285/article/details/78194282
还有butterknife最新的在3.0.0也报错有问题,所以我用的butterknife版本为8.4.0。

终于可以勾选那个Enable advanced profiling了,那里描述是,需要API级别小于26,在允许Profiler跟踪网络负载,应用程序事件和对象计数等数据的时候,它可能对构建速度有轻微的性能影响。

单击Network——网络使用情况

截图取自demo

横坐标代表是时间轴,那些折现是一些网络请求,按住鼠标左键从中选择一个范围,那用两条白色的竖杆包起来那块就是选择的范围,然后左下的列表就列出来了此范围的网络请求信息,什么状态啊,时间,请求类型啊,点击其中一条,右边显示的response更为具体了,图片的直接显示了图片,还有URL,不是图片的,把json数据全部都显示出来了,这个功能真的好方便呀,旁边还有一些选项,都可以看看用于分析。

单击MEMORY——内存使用情况

截图取自demo

单击CPU——CPU占用情况

截图取自demo

具体怎么分析使用,网上也有不少,可以参考博客:http://blog.csdn.net/niubitianping/article/details/72617864

更新于 2018/2/2

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,719评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,337评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,887评论 0 324
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,488评论 1 266
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,313评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,284评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,672评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,346评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,644评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,700评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,457评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,316评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,706评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,261评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,648评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,859评论 2 335

推荐阅读更多精彩内容