前段时间一直在S公司实习,虽然说编程能力不见得有多么大的提升,不过Debug技巧相比之前就有很大的提高,下面进行总结一下。
说到Debug,我们最常用的应该还是使用Eclipse的logcat工具。logcat工具的使用非常简单,如果找不到或者不知道这个工具在哪里,点击 Window->showview 查找。
logcat 打印出来的log有一下几种级别:
- VERBOSE 类型调试信息,verbose啰嗦的意思
- DEBUG 类型调试信息, debug调试信息
- INFO 类型调试信息, 一般提示性的消息information
- WARN 类型调试信息,warning警告类型信息
- ERROR 类型调试信息,错误信息
Android Log提供添加以上调试信息对应的方法
Log.v(String tag, String msg); //VERBOSE
Log.d(String tag, String msg); //DEBUG
Log.i(String tag, String msg); //INFO
Log.w(String tag, String msg); //WARN
Log.e(String tag, String msg); //ERROR
Tag为调试信息标签名称,msg为添加的调试信息
具体该调用哪个方法添加什么类型的调试信息?
可根据Logcat提供的过滤器来和信息类型来决定使用Log的那个方法添加哪类调试信息。
Logcat调试信息显示窗口 右上方有5个图标,代表种过滤器,可过滤输出相应的调试信息:
V:不过滤输出所有调试信息 包括 VERBOSE、DEBUG、INFO、WARN、ERROR
D:debug过滤器,输出DEBUG、INFO、WARN、ERROR调试信息
I:info过滤器,输出INFO、WARN、ERROR调试信息
W:waring过滤器,输出WARN和ERROR调试信息
E:error过滤器,只输出ERROR调试信息
使用的时候,我们一般会定义一个TAG,如下:
private static final String TAG = "ActivityName";
//在需要的地方分别使用如下
Log.v(TAG, "String msg");
Log.i(TAG, "String msg");
Log.d(TAG, "String msg");
Log.w(TAG, "String msg");
Log.e(TAG, "String msg");
这样,是不是比较麻烦。确实是,作为程序员,我们应该学会偷懒,偷懒方法如下:
private void log(String msg)
{
Log.d(TAG, msg);
}
//在需要的地方使用如下
log("String msg");
总之,各人各个人的偷懒方法。
如果出现FC,也就是强制关闭的情况,或者是其他Eclipse的logcat工具抓不到log的情况,这是后我们就无法知道错误的原因是什么了,这是非常麻烦的,这时候我们可以通过命令行抓取log,方法如下:
adb logcat -v time>D://app.log
这句命令的意思是抓取VERBOSE类型的log信息并输出到PC端的D盘的app.log文件中,然后就可以打开查阅,显然,这个方法比Eclipse的logcat强大稳定太多!Linux下使用也非常方便!
更多的关于 adb logcat 抓取log的方法,请参考博客:
Ubuntu 下 使用 adb logcat 显示 Android 日志
当然,这只是最简单的logcat调试,我们可以通过这个工具来查看很多变量的值或者是打印一些信息。不过还是很推荐使用断点调试,由于现在csdn上传图片有问题,所以先贴出一篇别人的博客:
详解Eclipse断点
另外,我们当前说的都是面对windows环境下的,如果是在linux环境下,特别是面对需要编译Android源码的情况,这个时候需要面对的就不只是几千行代码或者是几万行代码几十万代码了,是上百万行代码或更多,试想一下,如何在这么庞大的代码量中找到自己想要找到的那个东西的代码在哪里。
这时候就是体现 Hierarchy View perspective 工具的强大之处的时候了,不知道这个工具在哪? window->show view -> android 查找。使用这个工具可以再Eclipse中绘制手机或者虚拟器里面的界面,然后点击某一个控件或者是布局,就会有相应的信息出现,通过这写信息我们就可以查找到我们想定位的代码所在处。由于现在csdn博客编辑上传图片有问题,这个工具的使用日后再补充。
虽说调试技巧很重要,不过这里还是很推荐掌握 Eclipse快捷键技巧 ,这是一个合格的Android程序员应该掌握的基本技能。
当然,通过DDMS来调试Android程序也是经常使用的一个方法,很多情况下,比如我们打印Log或者是断点调试都是在这个环境下进行的。当然,这里还要介绍一个工具,那就是DDMS下的截图工具,缺图。。它的样子就是两个手机重叠在一起,一个是横屏的一个时竖屏的,大家找一下= =(过段时间我会修改博客,把该补充的补充)
点击这个按钮之后,Eclipse会把当前虚拟机或者是真机的当前界面截出来,显示在Eclipse中。然后当你点击这个截图中的某个地方时,左边会出现各种关于这个地方的信息,比如是一个控件,就会显示这个控件的layout布局信息,id信息,所在xml文件的path等非常多很有用的信息。
先记录一下,由于优快云现在无法上传图片,日后继续补充。