我正在尝试调试一些使用一些自定义引用计数/锁定的C /
Java绑定.我希望每当给定对象的监视器进入或退出时,JVM都会打印一条消息.有没有办法做到这一点?基本上,我想要这个:
synchronized(lock) {
...
System.out.println("hi");
...
}
打印这个:
*** "lock" monitorenter
hi
*** "lock" monitorexit
我查看了XX选项但没有发现任何内容.这是OpenJDK 6.
最佳答案 好问题.我能提出的唯一解决方案基本上是这样的:
使用自定义类加载器并使用字节码操作库(如ASM)预处理文件.(ASM有一个很好的例子,说明如何在类加载器中使用字节码重写.)
然后在每个monitorenter和monitorexit之前添加一个对System.out.println的调用.
由于ASM库中的访问者模式很好,这不应该只是一两个代码.