处理应用的bug,这是每个程序员的基本功,实际项目中天天都有各式各样的bug,因此学会如何使用Logcat、Android Lint以及Android Studio内置的调试器就非常有必要啦!
异常与栈跟踪
写代码嘛,一个不注意就把程序写奔啦,不用担心,展开Logcat工具窗口。上下滑动LogCat窗口滚动条,就能看到整片红色的异常或错误信息。若看不到,可尝试选择LogCat的No Filters过滤器项。还有信息太多的情况下,可以调整Log Level位Error,让系统只输出严重问题日志。或者直接搜索 “FATAL EXCEPTION”,直接定位到崩溃异常。
如图,模拟一个崩溃日志:
注意,Android应用编译,Kotlin代码会被编译为和Java代码同样的低级字节码,所以即使是用kotlin来编写代码,会看到java.lang异常也不用觉得太奇怪。
上述图片显示的异常,我们可以从异常语句直接跳转到源代码出错的对应行上,找出奔溃原因,加以修正。
当然这是比较简单的异常,真正的复杂项目中,碰到运行异常时,记得在LogCat中寻找最后一个异常及其栈跟踪的第一行(对应着源代码),这也是查找解决方案的最佳起点。
诊断应用异常
由于有的错误并不会产生崩溃,却得不到我们想要的结果,此时,我们就需要打印日志跟踪或者是断点调试了。
-
记录栈跟踪日志
打印日志也有点技巧,我们在调试一个功能异常的时候,TAG可设置成一种,方便我们过滤日志信息从而分析日志。
一般项目中都会自行封装一个专门打印Log日志的类,用于控制整个项目的日志输出,github上面有个挺多好用日志输出工具。
随意推荐两个:
logger :https://github.com/orhanobut/logger
LogCat:https://github.com/liangjingkanji/LogCat
-
设置断点
打断点也是程序员调试程序的常用方法,断点会在断点设置行的前一行代码出停止运行,然后我们可以逐行检查代码。
然后调试运行项目:
然后从Variables可以看到各种变量信息,当然也可以从旁边的箭头一步步执行代码,分析代码,上边有个小计算机图标,是用来做一些计算调试的,它可以改变一些变量看一些结果。
debug工具控制按钮:
「推荐」一篇专门讲了Android Studio一些各种小技巧的文章,当然包含了调试技巧。
地址:https://jaeger.itscoder.com/android/2016/02/14/android-studio-tips.html
小总结:
打印Log日志的优点是,在同一日志记录中可以看到多处的栈跟踪信息;缺点是,必须学习如何添加日志记录函数,重新编译、运行应用并跟踪排查应用问题。
相对而言,代码调试的方法更为方便,应用以调试模式运行后,可在应用运行的同时,在不同的地方设置断点,寻找解决问题的线索。
当然不同场景下,打印日志会更加清晰、方便寻找解决问题线索,比如说一个循环中。
Android特有的调试工具
-
使用Android Lint
Android应用代码的静态分析器(static analyzer)。
Analyze → Inspect Code...菜单项手动运行Lint。
选择Whole project,然后Android Studio会立即运行Lint和其他一些静态分析器开始分析代码。检查完毕,所有的潜在问题会按类别列出。
总的来说,Lint工具都提供了详细的信息,并给出了解决建议,我们可以选择解决,或者是忽略它。真正大项目还是看情况来吧,自己分析一下,是不是有必要解决。
-
R类的问题
资源编译错误有时会一直存在或莫名其妙地出现时候,可尝试的操作:
- 重新检查资源文件中XML文件的有效性
- 清理项目(Build -> Clean Project)
- 使用Gradle同步项目(Sync Project with Gradle Files)
- 运行Android Lint(或许会有意想不到的发现)
实在还没解决的问题,就访问Stack Overfow网站或本书论坛求助!^_^
挑战练习:探索布局检查器
Tools → Layout Inspector
可用交互的方式检查布局文件,研究它是如何在屏幕上渲染显示的。
还有有用的,分析布局,还有个调试布局不错的工具,在sdk->tools->bin->uiautomatorviewer,打开这个东西,也可以分析布局,结合使用。
挑战练习:探索Android性能分析器
Android Studio 3.0 及更高版本中的 Android Profiler 取代了 Android Monitor 工具。Android Profiler 工具可提供实时数据,帮助您了解应用的 CPU、内存、网络和电池资源使用情况。
具体参考:https://developer.android.com/studio/profile/android-profiler