在Java中,如何在每次输入或退出给定对象的监视器时记录消息?

我正在尝试调试一些使用一些自定义引用计数/锁定的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库中的访问者模式很好,这不应该只是一两个代码.

点赞