现有的方法,我想钩Java中的方法,并是System.out.print具有读/更改方法的部分之前的方法中使用的变量的能力被称为实际添加字符串无论输出流是什么。挂钩在Java中
在C++中,我只想绕路功能,或者设置一个INT指令,所以我可以访问寄存器,但在Java中,我不知道如何完成类似的东西。
现有的方法,我想钩Java中的方法,并是System.out.print具有读/更改方法的部分之前的方法中使用的变量的能力被称为实际添加字符串无论输出流是什么。挂钩在Java中
在C++中,我只想绕路功能,或者设置一个INT指令,所以我可以访问寄存器,但在Java中,我不知道如何完成类似的东西。
你可以重写的方法的字节码,并在这个过程中捕捉/改变局部变量。这不是微不足道的。请参阅一些注意事项here。
也许你真正想要的是一个java调试器?您可以将调试器连接到远程进程,添加断点,并使用eclipse轻松捕获/更改局部变量。
你试图解决什么是真正的问题?
您可以重新分配的System.out(和System.err)到另一个对象,做你想用它做什么。所述对象通常获取旧的System.out值,以便最后可以输出。
这通常在main()中完成并影响整个JVM。
我们利用这个有130列自动包装在更长的线路被截断一个非常奇特的设置。
由于JDK 1.1,在添加System.setOut
和System.setErr
方法使应用程序能够钩住流。
链接:http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#setOut(java.io.PrintStream)
http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#setErr(java.io.PrintStream)
@Nowayz前一段时间我也有同样的问题我。 经过一番研究,我才知道关于AOP
。 AOP
即AspectJ
提供了一个工具,通过在切入点之前,之后,周围应用切入点来拦截java API。所以看看它。 You can refer my question on stack。他可能会帮助你。
是的,这正是我正在寻找的东西,我想我将不得不阅读Java字节码的工作原理。感谢您的有用答案。 – Nowayz 2011-05-03 00:51:36
我正在尝试将所有System.out.print的调用记录到文件中。但是我运行我的类的应用程序并不是我开发的应用程序,实际上修改现有的代码会有些困难,所以我需要某种方法在VM规模上挂接该方法以便进行日志记录。 – Nowayz 2011-05-03 01:04:23
您可以使用http://www.eclipse.org/aspectj/doc/released/progguide/starting-aspectj.html方面在每个System.out.println周围添加一个点,或者将System.out简单地设置为其他内容http://blogs.sun.com/nickstephen/entry/java_redirecting_system_out_and – sbridges 2011-05-03 01:09:04