Android调试程序技巧

标签: android 调试 程序 | 发表时间:2012-04-05 17:10 | 作者:
出处:http://www.iteye.com

在开发的过程中我们经常需要调试程序的执行路径,如我们想知道一个Activity的生命周期方法的调用顺序,我们可能会写如下代码
.....
public void onResume() {
    super.onResume();
    Log.d("Tag","onResume()");
}

public void onStart() {
    super.onStart();
    Log.d("Tag","onStart()");
}

public void onPause() {
    super.onPause();
    Log.d("Tag","onPause()");
}

public void onStop() {
    super.onStop();
    Log.d("Tag","onStop()");
}

...

这样每次都要输入两个参数,有没有更简便的方法呢?

我们可以通过Thread.currentThread().getStackTrace()获取当前堆栈调用信息,从堆栈信息中可以获取当前调用的java文件名,类名,方法名和代码行号。

于是,我们封装了一个工具类LogHelper。我们只需要使用这个工具类,在跟踪的位置调用LogHelper.trace()方法就可以打印当前调用方法的信息。

例子:打印Activity的生命周期方法执行流程。

package cn.caiwb;

import android.util.Log;

public final class LogHelper {
	private static boolean mIsDebugMode = true;//获取堆栈信息会影响性能,发布应用时记得关闭DebugMode
	private static String mLogTag = "LogHelper";

	private static final String CLASS_METHOD_LINE_FORMAT = "%s.%s()  Line:%d  (%s)";

	public static void trace() {
		if (mIsDebugMode) {
			StackTraceElement traceElement = Thread.currentThread()
					.getStackTrace()[3];//从堆栈信息中获取当前被调用的方法信息
			String logText = String.format(CLASS_METHOD_LINE_FORMAT,
					traceElement.getClassName(), traceElement.getMethodName(),
					traceElement.getLineNumber(), traceElement.getFileName());
			Log.d(mLogTag, logText);//打印Log
		}
	}
}



package cn.caiwb;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class LogHelperActivity extends Activity {
    /** Called when the activity is first created. */
	
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        LogHelper.trace();
    }
    
    
    @Override
    public void onStart() {
    	super.onStart();
    	LogHelper.trace();
    }
    
    @Override
    public void onResume() {
    	super.onResume();
    	LogHelper.trace();
    }
    
    @Override
    public void onPause() {
    	super.onPause();
    	LogHelper.trace();
    }
    
    @Override
    public void onStop() {
    	super.onStop();
    	LogHelper.trace();
    }
    
    @Override
    public void onDestroy() {
    	super.onDestroy();
    	LogHelper.trace();
    }
}


Log打印结果




总结:

通过使用LogHelper的trace()方法,在调试的时候我们可以非常方便地打印应用的执行流程


已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [android 调试 程序] 推荐:

Android调试程序技巧

- - ITeye博客
在开发的过程中我们经常需要调试程序的执行路径,如我们想知道一个Activity的生命周期方法的调用顺序,我们可能会写如下代码. 这样每次都要输入两个参数,有没有更简便的方法呢. 我们可以通过Thread.currentThread().getStackTrace()获取当前堆栈调用信息,从堆栈信息中可以获取当前调用的java文件名,类名,方法名和代码行号.

Linux程序调试

- - C++博客-首页原创精华区
Linux下的段错误产生的原因及调试方法    原文地址: http://www.upsdn.net/html/2006-11/775.html .    参考地址: http://www.cnblogs.com/khler/archive/2010/09/16/1828349.html .

Android4.4支持使用DevTools对原生Android应用程序WebViews内容进行调试

- - CSDN博客移动开发推荐文章
从Android4.4(KitKat)开始,可以使用DevTools对原生Android应用程序的Android WebViews内容进行调试. 调试WebViews要求:. 1.在Android设备或模拟器运行Android4.4或更高版本,并且Android设备上启用USB调试模式. 2.Chrome 30或更高版本.

Android 应用程序

- - CSDN博客推荐文章
Android 应用程序由四个模块构造而成:Activity、Intent 、Content Provider 、Service. 下面简单介绍一下如下模块的含义:. 1、Activity  "活动". 一个Activity就是单独的屏幕,每一个活动都被实现为一个独立的类,并且从活动基类中继承而来,活动类将会显示由视图控件组成的用户接口并对事件作出响应.

Android 程序框架设计

- - 互联网的那点事
每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心. 通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作. 设计模式是在某种特别的情况下,针对某种问题的某种典型、通用的解决方法. 我们是需要适当了解并学习一些设计模式,在程序开发过程中,总是会涉及到一些框架设计,模块设计之类的东西,如果能很好理解并运行设计模式,你所设计的模块或框架将会要稳定得多,因为这些设计模式它们都是通用的解决方案,是经过实践经验了的.

用gdb+nm调试php c extension程序

- ndv - 淘宝核心系统团队博客
最近在写Beanstalkd的php c extension客户端程序,写程序离不开调试,下面把调试中碰到的问题和解决方法和大家分享一下. .so写好了是给php脚本调用的,如果php脚本执行崩掉了,.so也只能在进程中饮恨而终,这时候php脚本调试经常用的echo, print_r, var_dump都派不上用场了.

调试JavaScript脚本程序(Firefox篇)

- - JavaScript - Web前端 - ITeye博客
试Firefox里面的脚本需要安装一个插件Venkman:. 1.       启动Firefox,浏览页面. 2.       点击“Add to firefox”,重启Firefox就可以使用了. 先简单地介绍一下如何在Venkman里面设置断点和查看变量的值. 1.       启动Firefox,运行网页到test.html.

Go程序调试、分析与优化

- - Tony Bai
Brad Fitzpatrick在 YAPC Asia 2015(Yet Another Perl Conference)上做了一次技术分享,题为:" Go Debugging, Profiling, and Optimization". 个人感觉这篇分享中价值最大的是BradFitz现场演示的一个有关如果对 Go程序进行调试、分析和优化的 Demo,Brad将demo上传到了他个人在github.com的 repo中,但不知为何,repo中的代码似乎与repo里talk.md中的说明不甚一致(btw,我并没有看video).

调试真机调试安卓Unity程序

- - CSDN博客推荐文章
我们在使用Unity开发安卓游戏的时候,虽然可以很方便的在编辑器里直接启动查看运行效果,但是编辑器的环境始终比不上真机显示来的直接,而且有些操作,类似多点触控等等操作,必须要在手机端才能触发,如果我们不想一遍遍的编译apk安装到手机上的话,Unity Remote会是一个很好的选择. 注意:Remote在手机上的运行结果并不能取代打包安装之后运行的结果,他只是将编辑器的显示图像同步到了手机上,并通过手机接收输入而已.

Eclipse开发Android应用程序入门

- Bingnan - 酷壳 - CoolShell.cn
原文出处:http://www.smashingmagazine.com/2010/10/25/get-started-developing-for-android-with-eclipse/. 如今的移动设备应用程序开发充满着让人振奋的东西. 功能强大的硬件支持,平板电脑,多样的软件平台(塞班 OS,iOS,WebOS,Windows Phone 7…),移动设备开发者前景充满了机会和挑战.