今天发现一个奇怪的问题,就是在eclipse里面设置的断点无论如何就是不被触发。
现象如下:我启动了好几个服务(不同的jvm进程),有一个服务的代码中设置的断点始终不能被触发,其它几个服务都好好的。通过日志可以确定程序肯定被正确执行,而且设置断点的行也被执行了。检查“Skip All Breakpoints”也没有选中,重启现象依旧。
后来网上搜了一下发现,这原来是jdk的一个bug,我用的是jdk1.6 update 14,正好是有问题的这个版本。
详细说明见:http://www.oracle.com/technetwork/java/javase/6u15-142514.html
解决方案,很简单,就是得使用Parallel Scavenge garbage collector ( -XX:+UseParallelGC
) or the Parallel Compacting garbage collector (-XX:+UseParallelOldGC
)这两种垃圾收集器的其中一种。加上-XX:+UseParallelGC选项,果然问题解决。或者升级jdk版本。stackoverflow上有对这个问题的详细说明。
http://stackoverflow.com/questions/1370868/eclipse-debugger-doesnt-stop-at-breakpoint