各位大虾,我现在在做一个东西,需要能够监测一个java程序(有源程序)在执行过程中调用了哪些方法(包括该方法属于哪个对象),以及这些方法被调用的先后顺序。请问这个应该如何实现,有什么开源的工具或者要使用java的哪种技术,多谢各位指导 

解决方案 »

  1.   

    放个log4j.jar在你的lib下面,然后在在你的配置文件目录里面加一个log4j.properties的文件,在这个文件设置一下就能够基本看到程序的大体运行了,如果你要更详细的,那么你在每个函数里面加上一个log函数,让他随便打印点东西,那你就能够检测到哪个函数在调用,什么时候被调用了
      

  2.   

    你可以考虑下Log4j。有关Log4j如何使用,网上的资料还是挺多的,你可以去搜寻下。
      

  3.   

    Log4j估计不是LZ想要的,因为Log4j要自己在代码中控制log输出,而LZ的意思好像是在一个已有的程序中,查看该进程的执行信息,这个估计要用第三方工具了,比如某些性能监控的工具等等
    如果自己写的话,可以参考java.lang.management下的类,看看有没有帮助
    一般,Thread对象可以打印出当前堆栈的信息,所以可以考虑把整个程序的thead的堆栈信息打出来
    for example
    for (Map.Entry<Thread, StackTraceElement[]> entry : Thread.getAllStackTraces().entrySet()) {
        for (StackTraceElement ste : entry.getValue()) {
            System.out.println(ste);
        }
    }
      

  4.   

    听上去很像AOP编程,动态代理的话不知道是不是太麻烦了?