J2SE基础夯实系列之使用StackTraceElement封装,打印调试代码!
来源:互联网 发布:魔笛手压缩算法 编辑:程序博客网 时间:2024/05/26 08:42
这个是在Alcatel-Lucent实习的时候,学到。
原来老是看别人说要掌握Java的几个API包,例如lang和util,起码要熟悉,本来以为自己已经熟悉了,现在才知道自己还差得远啊。需要上网搜集各包的相关知识,扩展下。
譬如说StackTraceElement这个,可以得到方法的调用栈信息,那么在进行开发的时候,为了比较好的测试,查看代码流程,可以在每个方法的开头还有结尾trace下,这样的话,
代码如下:
- public class Trace {
- public void methodStart() {
- StackTraceElement thisMethodStack = (new Exception()).getStackTrace()[1];
- System.out.println("[" + thisMethodStack.toString() + "]-----MethodStart");
- }
- public void methodEnd() {
- StackTraceElement thisMethodStack = (new Exception()).getStackTrace()[1];
- System.out.println("[" + thisMethodStack.toString() + "]-----MethodEnd");
- }
- public void trace(String string) {
- StackTraceElement thisMethodStack = (new Exception()).getStackTrace()[1];
- System.out.println("[" + thisMethodStack.toString() + "]" + string);
- }
- }
上面的打印语句可以换成不同的公司的traceAPI。
下面是测试:
- public class TraceTest {
- Trace trace = new Trace();
- public static void main(String[] args) {
- new TraceTest().test();
- }
- private void test() {
- trace.methodStart();
- System.out.println("111\ndddd\n");
- trace.trace("this the trace");
- trace.methodEnd();
- }
- }
其中有一点,最上面的trace类,本来想要把三个方法都有的那个thisMethodStack语句提到最前面来,经过试验才知道,只能放到放里面,这样的话,输出结果里面才会有trace的正确的行数:看下面,在【】里面的是类名里面方法名还有行数都里出来了。
- [TraceTest.test(TraceTest.java:10)]-----MethodStart
- 111
- dddd
- [TraceTest.test(TraceTest.java:12)]this the trace
- [TraceTest.test(TraceTest.java:13)]-----MethodEnd
还有一点,对于语句
- StackTraceElement thisMethodStack = (new Exception()).getStackTrace()[1];如果放在trace类的最前面的话;
- 最后中括号里面一定是1,如果换成0,那就打印的是调用该方法的主方法所在的行数,如果换成2,那就是方法调用结束后,返回到哪一行。例如:
- 否则,如果是0:那么返回的就是这条语句在trace在各个方法里面的行数,2的话
- [TraceTest.main(TraceTest.java:6)]-----MethodStart
- 111
- dddd
- [TraceTest.main(TraceTest.java:6)]this the trace
- [TraceTest.main(TraceTest.java:6)]-----MethodEnd
- 就是返回后的地方。
- 一个可以常用的方法。
- J2SE基础夯实系列之使用StackTraceElement封装,打印调试代码!
- J2SE基础夯实系列之JDBC,链接数据库实例代码
- J2SE基础温习夯实系列之总纲
- J2SE基础夯实系列之异常体系
- J2SE基础夯实系列之数组
- J2SE基础夯实系列之JavaBean
- J2SE基础夯实系列之Enum枚举
- J2SE基础夯实系列之File的相关方法代码实例
- J2SE基础夯实系列之BigInteger使用总结(也是不可变的)
- J2SE基础夯实系列之使用Arrays.sort()方法,以及涉及到的Comparable和Comparator
- J2SE基础夯实系列之访问限定符
- J2SE基础夯实系列之遍历Map的所有元素
- J2SE基础夯实系列之throws还有throw的区别
- J2SE基础夯实系列之finally中return语句
- J2SE基础夯实系列之正则表达式(Regular Expression)
- J2SE基础夯实系列之垃圾回收机制
- J2SE基础夯实系列之正则表达式Java
- J2SE基础夯实系列之容器(待更新)
- 08-11
- vim的配色方案
- unable to load class jxl.read.biff.BiffException
- 将DataTable转换成Json格式串的方法
- 升级Android Sdk Tools时遇到Failed to rename directory \tools to \temp\ToolPackage.old01的解决办法
- J2SE基础夯实系列之使用StackTraceElement封装,打印调试代码!
- SQL通用防注入系统asp版 插一句话漏洞利用
- Extjs DOM操作总结
- 自然语言处理工具(Stanford-Parser)使用注意事项
- 精心挑选的23款美轮美奂的 jQuery 图片特效插件
- vector string的应用
- skb里的数据
- Adding Dynamic Contents to IFrames
- 今天是2012年8月14日