当前位置:编程学习 > JAVA >>

J2SE基础夯实系列之使用StackTraceElement封装,打印调试代码!

这个是在Alcatel-Lucent实习的时候,学到。

       原来老是看别人说要掌握Java的几个API包,例如lang和util,起码要熟悉,本来以为自己已经熟悉了,现在才知道自己还差得远啊。需要上网搜集各包的相关知识,扩展下。
       譬如说StackTraceElement这个,可以得到方法的调用栈信息,那么在进行开发的时候,为了比较好的测试,查看代码流程,可以在每个方法的开头还有结尾trace下,这样的话,
代码如下:
[java] 


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。

下面是测试:

[java]


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的正确的行数:看下面,在【】里面的是类名里面方法名还有行数都里出来了。
[java]


[TraceTest.test(TraceTest.java:10)]-----MethodStart 
111 
dddd 
 
[TraceTest.test(TraceTest.java:12)]this the trace 
[TraceTest.test(TraceTest.java:13)]-----MethodEnd 

还有一点,对于语句
[java]


StackTraceElement thisMethodStack = (new Exception()).getStackTrace()[1];如果放在trace类的最前面的话; 
[java] 


最后中括号里面一定是1,如果换成0,那就打印的是调用该方法的主方法所在的行数,如果换成2,那就是方法调用结束后,返回到哪一行。例如: 
[java] view plaincopy


否则,如果是0:那么返回的就是这条语句在trace在各个方法里面的行数,2的话 
[java] 


[TraceTest.main(TraceTest.java:6)]-----MethodStart 
111 
dddd 
 
 
[TraceTest.main(TraceTest.java:6)]this the trace 
[TraceTest.main(TraceTest.java:6)]-----MethodEnd 
[java] 


就是返回后的地方。 
[java] 


一个可以常用的方法。 
[java]


 

 


作者:Allen_Zhao_2012
补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,