我有一个经典的Heisenbug例子是由我以前从未见过的情况引发的。我的遗留应用程序(大约100K旧代码)无法在特定实例中正常工作,仅仅启用JPDA进行远程调试就足以改变行为,导致应用程序正常工作:除了添加“-Xdebug -Xnoagent -Xrunjdwp之外什么都不做: transport = dt_socket,server = y,suspend = n,address = 6666“到vm的命令行隐藏了bug(有或没有实际连接)。鉴于我有一个完全可重复的测试用例,我讨厌在代码更改的情况下对其进行干扰,以防它重新隐藏。当然,这只是在生产中发生的。
通常,我会立即假设一个线程问题,但是a)行为是100%失败而100%工作,b)在相关代码路径中没有明确使用线程。然后我们的团队试图找出这种行为的其他原因列表,所以我想也许Stack Overflow的团队思想可能会增加更多。
Java中的Heisenbugs:
还有其他值得探索的案例吗?
编辑:
答案 0 :(得分:4)
-Xdebug似乎是一个行为改变开关。 What are Java command line options to set to allow JVM to be remotely debugged?声称添加它会使您从JIT变为所有解释。其他oracle java docs(for jrocket admittedly)似乎表明它由于某些未指明的原因而变慢,并且它不适合已部署的系统。
我可以想象不同的GC方案可能会进行更改。
答案 1 :(得分:3)
我遇到了一个案例,其中故障是由硬件上的节能功能引起的,当该bug正在研究中时,该功能从未被激活。