文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
8.3 挂起整个虚拟机
在这里,我还想提一个比较重要的功能。在默认情况下,当断点条件成立时,系统会挂起相关的线程,没有断点的线程会继续执行。在实际环境中,那些还在继续执行的线程可能会对整个调试产生不利的影响。为此,我们可以设置断点类型为挂起整个Java虚拟机,而不仅仅是挂起相关线程。如图8.6所示,改变这个断点的类型:
图8.6 设置断点类型为挂起整个虚拟机
当然,默认情况下,调试器只会挂起遇到断点的线程,如果你希望所有断点的模式都是挂起虚拟机而不是挂起线程,则还可以在Eclipse的全局配置中设置,如图8.7所示。
图8.7 设置断点模式行为为挂起虚拟机
在挂起虚拟机模式下,程序进入断点后的状态如图8.8所示。
图8.8 挂起虚拟机时的系统状态
可以看到,当前所有的线程全部处于挂起状态,不论当前线程是否接触到了断点。这种模式可以排除其他线程对被调试线程的干扰。当然,使用这种方法有时候会引起调试器或者虚拟机的一些问题,导致系统不能正常工作。
直接执行上述代码,很可能抛出类似下面的异常:
Exception in thread "t2" java.lang.ArrayIndexOutOfBoundsException: 21079 at java.util.ArrayList.add(ArrayList.java:444) at geym.conc.ch8.UnsafeArrayList$AddTask.run(UnsafeArrayList.java:19) at java.lang.Thread.run(Thread.java:745)
下面,就让我们用单步调试的方法,来重现这个异常吧!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论