平时在工作中会遇到很大的代码阅读,不知无从下手,尤其对于应用来说,不知道流程是很麻烦的事情。一种方式可以sourceinsight来看或者eclipse,但当程序比较晦涩的时候,最有效的方法还是打印信息,追踪到每一个函数。程序的脉络就清晰啦,模块就会更加的清晰。
打印代码的优点:
1) 模块清晰,方便定位
2) 看似很花时间,其实节约时间,只要打印信息一上去,就立即可以开始调试了
缺点:
1)有的地方加打印是不安全的,比如中断服务和线程里面,这时候打印可能会导致死机或者异常, 这时候打印可以适当的短或者去掉打印
2)这样的打印信息太多,需要灵活的运用grep,结合log整理思路,把层次分析清楚
下面说一说我常用的方法:
现在在做Android,先说java的如何做:
1 新建T.java文件[文件名和函数名都最短],内容如下
----------------------------------------------------------------------------------------------------
package com.debug;
public class T {
//函数的开始调用
public static void s() {
StringBuffer sb = new StringBuffer();
StackTraceElement[] stacks = new Throwable().getStackTrace();
int stacksLen = stacks.length;
sb.append("[").append(stacks[1].getClassName()).append("::")
.append(stacks[1].getMethodName()).append("()")
.append(stacks[1].getLineNumber()).append("]" );
sb.toString();
System.out.println(" ===> " +sb);
}
// 函数可能结束地方调用
public static void e() {
StringBuffer sb = new StringBuffer();
StackTraceElement[] stacks = new Throwable().getStackTrace();
int stacksLen = stacks.length;
sb.append("[").append(stacks[1].getClassName()).append("::")
.append(stacks[1].getMethodName()).append("()")
.append(stacks[1].getLineNumber()).append("]" );
sb.toString();
System.out.println(" <=== " +sb);
}
}
----------------------------------------------------------------------------------------------------
2. 如图放置,这样可以尽可能的少影响工程代码和方便重用
+src
+com.debug
T.java
+com.android.xxx
A.java
B.java
3.在工程文件中包含调试代码
import com.debug.T;
4. 调用
函数开始的地方:T.s();
函数结束的地方:T.e();
好了,这就是java中如何调用拉,C中更简单些,有时间补上吧,希望对你有帮助,谢谢!