使用StackTraceElement封装,打印调试代码!

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


       原来老是看别人说要掌握Java的几个API包,例如lang和util,起码要熟悉,本来以为自己已经熟悉了,现在才知道自己还差得远啊。需要上网搜集各包的相关知识,扩展下。

       譬如说StackTraceElement这个,可以得到方法的调用栈信息,那么在进行开发的时候,为了比较好的测试,查看代码流程,可以在每个方法的开头还有结尾trace下,这样的话,

代码如下:

[java]  view plain copy print ?
  1. public class Trace {  
  2.       
  3.     public void methodStart() {  
  4.         StackTraceElement thisMethodStack = (new Exception()).getStackTrace()[1];  
  5.         System.out.println("[" + thisMethodStack.toString() + "]-----MethodStart");  
  6.     }  
  7.       
  8.     public void methodEnd() {  
  9.         StackTraceElement thisMethodStack = (new Exception()).getStackTrace()[1];  
  10.         System.out.println("[" + thisMethodStack.toString() + "]-----MethodEnd");  
  11.     }  
  12.       
  13.     public void trace(String string) {  
  14.         StackTraceElement thisMethodStack = (new Exception()).getStackTrace()[1];  
  15.         System.out.println("[" + thisMethodStack.toString() + "]" + string);  
  16.     }  
  17. }  

上面的打印语句可以换成不同的公司的traceAPI。


下面是测试:


[java]  view plain copy print ?
  1. public class TraceTest {  
  2.     Trace trace = new Trace();  
  3.       
  4.     public static void main(String[] args) {  
  5.         new TraceTest().test();  
  6.     }  
  7.       
  8.     private void test() {  
  9.         trace.methodStart();  
  10.         System.out.println("111\ndddd\n");  
  11.         trace.trace("this the trace");  
  12.         trace.methodEnd();  
  13.     }  
  14.   
  15. }  

       其中有一点,最上面的trace类,本来想要把三个方法都有的那个thisMethodStack语句提到最前面来,经过试验才知道,只能放到放里面,这样的话,输出结果里面才会有trace的正确的行数: 看下面,在【】里面的是类名里面方法名还有行数都里出来了
[java]  view plain copy print ?
  1. [TraceTest.test(TraceTest.java:10)]-----MethodStart  
  2. 111  
  3. dddd  
  4.   
  5. [TraceTest.test(TraceTest.java:12)]this the trace  
  6. [TraceTest.test(TraceTest.java:13)]-----MethodEnd  

还有一点,对于语句
[java]  view plain copy print ?
  1. StackTraceElement thisMethodStack = (new Exception()).getStackTrace()[1];如果放在trace类的最前面的话;  
[java]  view plain copy print ?
  1. 最后中括号里面一定是1,如果换成0,那就打印的是调用该方法的主方法所在的行数,如果换成2,那就是方法调用结束后,返回到哪一行。例如:  
[java]  view plain copy print ?
  1. 否则,如果是0:那么返回的就是这条语句在trace在各个方法里面的行数,2的话  
[java]  view plain copy print ?
  1. [TraceTest.main(TraceTest.java:6)]-----MethodStart  
  2. 111  
  3. dddd  
  4.   
  5.   
  6. [TraceTest.main(TraceTest.java:6)]this the trace  
  7. [TraceTest.main(TraceTest.java:6)]-----MethodEnd  
[java]  view plain copy print ?
  1. 就是返回后的地方。  
[java]  view plain copy print ?
  1. 一个可以常用的方法。  
[java]  view plain copy print ?
  1.   


 

转载于:https://www.cnblogs.com/allenzhaox/archive/2012/08/14/3201822.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值