57. Android之程序调试LogCat (转)
无论什么样的程序开发过程中,出现错误都是不可避免的,一般情况下,语法错误会被开发环境检测到,并能及时的提示我们错误的位置以及修改的方法,但是逻辑错误就不是那么容易被发现了,通常逻辑错误的定位和分析是一件非常困难的事情。
所以在学习Android过程中,继学习它的程序结构,写了HelloWorld和一些简单的界面布局程序之后,我选择研究一下它的调试工具。LogCat就是其中一个。LogCat是用来获取系统日志信息的工具,它可以捕获的信息包括Dalvik虚拟机产生的信息,进程信息,ActivityManager信息,PackagerManager信息,Android运行时信息和应用程序信息等等。
我们可以在打开Eclipse之后,选择Window –> Show View ->Other菜单,然后在Android->LogCat中选择LogCat,这样LogCat便会在Eclipse的下方区域出现了。
其中,在LogCat的右上方的5个字母分别表示了5种不同类型的日志信息(并以不同颜色加以区分,级别越高,颜色越突出):
1. [V]:详细(Verbose)信息,输出颜色为黑色
2. [D]:调试(Debug)信息,输出颜色是蓝色
3. [I]:通告(Info)信息,输出颜色为绿色
4. [W]:警告(Warn)信息,输出颜色为橙色
5. [E]:错误(Error)信息,输出颜色为红色,这里错误信息的级别最高,其次是警告信息,然后是通知信息和调试信息,级别最低的是详细信息。
6.[assert],新版本加入的。
在LogCat中,我们可以通告这5个字母图标选择要显示的信息类型,级别高于所选类型的信息也会在LogCat中显示,但级别低于所选类型的信息则不会被显示。
在Android程序调试过程中,首先要引入android.util.Log包,然后使用用来记录详细信息的Log.v()、用来记录调试信息的Log.d()、用来记录通告信息的Log.i()、用来记录警告信息的Log.w()、用来记录错误信息的Log.e()这样五个函数在程序中设置“日志点”。这些函数的第一个参数是日志标签TAG(就是在你要测试的位置需要一个常量用来标记,标记的名字就是所谓的日志标签),第二个参数是实际的信息内容。每当程序运行到我们设置的“日志点”时,应用程序的日志信息便被发送到LogCat中,我们就可以根据“日志点”显示的信息与预期我们在函数中设置的信息内容是否一致来判断程序是否存在错误,这样就能根据“日志点”来迅速找到错误的“出事地点”了。
在下面的程序中,演示了Log类的具体使用方法:
package wt.relativeLayout;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class RelativeLayout extends Activity {
final static String TAG = "LOGCAT";
private TextView tv = null;
private EditText et = null;
private Button btn1 = null;
private Button btn2 = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView)findViewById(R.id.label);
et = (EditText)findViewById(R.id.entry);
btn1 = (Button)findViewById(R.id.cancel);
btn2 = (Button)findViewById(R.id.ok);
tv.setText(R.string.name);
btn1.setText(R.string.button1);
btn2.setText(R.string.button2);
Log.v(TAG, "This is Verbose");
Log.d(TAG, "This is Debug");
Log.i(TAG, "This is Info");
Log.w(TAG, "This is Warn");
Log.e(TAG, "This is Error");
}
}
程序运行后,LogCat捕获得到应用程序发送的日志信息,显示结果如下图:

通过结果我们发现,即使我们事先选择了某个特定的日志信息的级别,产生的日志信息还是有很多,需要我们逐条去阅读,给我们带来很大的麻烦。这时我们就要用到一个LogCat提供的“过滤”功能了,在右上角的“+”号和“-”号,分别是添加和删除过滤器。我们可以根据日志信息的标签(Tag)、产生日志的进程编号(Pid)或者信息等级(Level),对显示的日志内容进行过滤。在实际使用中,我们最好为每一个类声明一个字符串常量TAG,这样在Logcat中我们可以容易区分不同的类的日志了。
下面使用在LogCat右上角的“+”号,添加一个名为LogcatFilter的过滤器,并设置过滤条件为“标签=LOGCAT”,下图为过滤器的具体设置方法:

过滤器设置好后,LogcatFilter过滤后的日志信息如下图,这样,无论什么类型的日志信息,属于哪个进程,只要标签为LOGCAT,都将显示在LogcatFilter内。

运行测试后,对logCat中的log通过配置l过滤器进行过滤



这样,调试工作就完成了。
57. Android之程序调试LogCat (转)的更多相关文章
- Android真机调试手动添加程序包的LogCat
android真机调试有时候看LogCat 时,有时候那个跑的本程序的LogCat 没有出现而是 出现的是" All messages (no filters) " .此时 的Lo ...
- [安卓][转]Android eclipse中程序调试
一:断点调试 用eclipse开发android程序的时,跟VS一样是可以断点单步调试的.步骤如下.1 设置断点:在编码窗体的左边框上用鼠标双击,或者右键点击菜单,选择 Toggle Breakpoi ...
- Android eclipse中程序调试
一:断点调试 用eclipse开发android程序的时,跟VS一样是可以断点单步调试的.步骤如下.1 设置断点:在编码窗体的左边框上用鼠标双击,或者右键点击菜单,选择 Toggle Breakpoi ...
- Eclipse+CDT+GDB调试android NDK程序(转)
Eclipse+CDT+gdb调试android ndk程序 先介绍一下开发环境,在这个环境下,up主保证是没有问题的. ubuntu 11.10 eclipse 3.7(indego) for ja ...
- 052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试——debug2 多断点调试程序
052 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 14 Eclipse下程序调试--debug2 多断点调试程序 本文知识点: Eclipse下程序调 ...
- 051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试——debug入门1
051 01 Android 零基础入门 01 Java基础语法 05 Java流程控制之循环结构 13 Eclipse下程序调试--debug入门1 本文知识点: 程序调试--debug入门1 程序 ...
- Android APK程序的smali动态调试
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/71250622 一.Apktool的下载和安装 Apktool是Android逆向分 ...
- Android卸载程序之后跳转到指定的反馈页面
一个应用被用户卸载肯定是有理由的,而开发者却未必能得知这一重要的理由,毕竟用户很少会主动反馈建议,多半就是用得不爽就卸,如果能在被卸载后获取到用户的一些反馈,那对开发者进一步改进应用是非常有利的.目前 ...
- 用 Eclipse 开发 Android 应用程序
转自:http://www.apkbus.com/android-13828-1-1.html 开始之前 本教程介绍如何在 Eclipse 环境中进行 Android 应用程序开发,包括两个示例应用程 ...
随机推荐
- background-size背景缩放
特别注意:背景图片缩放是相对于背景图片所在容器的宽高而言的,并不是相对背景图片本身的宽高 比如,一个div的宽高是300和200像素,背景图片本身的宽高是100*100的像素,设置div的backgr ...
- iOS RunTime运行时(1):类与对象
Objective-C语言是一门动态语言,他将很多静态语言在编译和链接期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码更具有灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一下 ...
- sudo su权限案例
一 控制sudo: 允许执行所有命令,排除某几个命令(带参数) lanny ALL=(ALL) NOPASSWD:ALL, !/bin/su - root, !/usr/sbin/visudo 如果需 ...
- 利用Spring的@Async异步处理改善web应用中耗时操作的用户体验
Web应用中,有时会遇到一些耗时很长的操作(比如:在后台生成100张报表再呈现,或 从ftp下载若干文件,综合处理后再返回给页面下载),用户在网页上点完按钮后,通常会遇到二个问题:页面超时.看不到处理 ...
- 需要安全认证的远程EJB调用示例(Jboss EAP 6.2环境)
一,Remote EJB 服务接口定义: package yjmyzz.ejb.server.helloworld; public interface HelloWorldService { publ ...
- 利用windbg查找dictionary导致IIS占CPU100%案例分析(一)
一.背景 先说下windbg使用场景.各位coder在工作中或多或少都会遇到下面四种情况 1.本地代码好好的,放服务器上运行一段时间后,IIS服务突然占用 w3wp.exe CPU突然100% ,不得 ...
- 线程本地变量ThreadLocal源码解读
一.ThreadLocal基础知识 原始线程现状: 按照传统经验,如果某个对象是非线程安全的,在多线程环境下,对对象的访问必须采用synchronized进行线程同步.但是Spring中的各种模板 ...
- Android -- Apk安装简诉
安装涉及到如下几个目录 system/app 系统自带的应用程序,无法删除 data/app 用户程序安装的目录,有删除权限. 安装时把apk文件复制到此目录 data/data 存放 ...
- CUDA1-hello world
电脑配置:windows7 sp1 64bit + CUDA6.5 + GeForce GTX780 Ti 显卡中的GPU因为多核可以处理很多相同的操作,相比较来说cpu就像个健全的手,什么活都能干 ...
- 用matlab实现同一个序列重复N倍
同一个序列 重复N倍 怎么用matlab实现 可以使用repmat函数 repmat(A, 1, 3) 其中A即为复制的矩阵,1为纵向复制的次数,3即为横向复制的次数.