zoukankan      html  css  js  c++  java
  • 使用StackTraceElement封装,打印调试代码!

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


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

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

    代码如下:

    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。


    下面是测试:


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

    还有一点,对于语句
    1. StackTraceElement thisMethodStack = (new Exception()).getStackTrace()[1];如果放在trace类的最前面的话;  
    1. 最后中括号里面一定是1,如果换成0,那就打印的是调用该方法的主方法所在的行数,如果换成2,那就是方法调用结束后,返回到哪一行。例如:  
    1. 否则,如果是0:那么返回的就是这条语句在trace在各个方法里面的行数,2的话  
    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  
    1. 就是返回后的地方。  
    1. 一个可以常用的方法。  
    1.   


  • 相关阅读:
    使用字符流(Writer、Reader)完成对文件的读写操作
    Java中File类重修
    适配器模式学习
    oracle 新建数据库 ,新建用户
    8.19 extjs jar 包使用。
    8.15 session 有效时间, session在数据查询中最后不用
    8.15 自定义tr行 滚动 信息行的滚动
    8.15jsp document 头部声明 区别
    8.14 图片滚动无缝
    8.13Oracle新建用户、角色,授权
  • 原文地址:https://www.cnblogs.com/allenzhaox/p/3201822.html
Copyright © 2011-2022 走看看