我正在尝试修改OpenJDK 9以记录Java程序调用的每个方法,特别是我正在尝试一个非常简单的类,其中main
调用一个自己的静态方法在stdout上每两秒打印一行(等待Thread.sleep
完成)
阅读this blog post后,我将日志代码放在javaCalls::call
中。它可以工作,记录从JVM启动的大量调用到Myclass.main的调用,然后停止(我的程序继续打印)。使用CTRL^C
退出程序后,日志记录将恢复并记录Thread.exit
等方法。
然后我尝试了另一种方法:在每个字节码上检测hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp
以进行调用。比以前更糟糕,这不会打印任何东西。
起初我依赖于新的JDK 9日志记录功能,但后来我决定直接附加到文件以排除在某些时候禁用日志的可能性。
我有两个问题: