工具使用的是IDEA
1. debug模式下断点的作用方式有两种,
all表示遇到断点时,所有线程都会停滞在当前状态中(并未挂起,依然都是可运行状态),其他线程都无法继续运行。当过掉这个断点时,所有线程会同时开始争抢CPU资源,这时是无法保证当前线程优先运行的。
thread表示只中断当前执行此行代码的线程,其他线程仍然可正常运行(当然,若有锁争抢的情况,也会导致其他线程等待)
2. 知道了上述特性,我们在debug测试时就可以做些文章了
ps:建议不要两种断点混合使用,因为你会不知道你F6跳过当前步,下一步会执行到哪里,反正个人觉得有点混乱,比较麻烦。
在测试时,我们可以在多个线程上都打上断点(根据需要)然后在Frames选中切换线程进行调试。
最后再提一下如何在debug过程中修改某个变量的值(这个以前的笔记应该有,重新写一下吧)
个人了解的有三种方式:
下面两种方式都可以,个人喜好
.
主要是第三种比较特殊,前面两种修改是一次性的,而第三种是多次的,每次F6跳一行,它就执行一次
下面例子中,我在watches里加入了dt.anInt++,结果当我DEBUG运行几行代码后(这几行代码对该变量无操作)anInt的值直接增加到了6,事实上我没按F6一次,它就执行一次。这样的特性显然没什么用处,也不是我们想要的,需要避免这个坑。
但是,它并不是没什么用的,假如我这样写,即可以保证,该变量在debug过程中,全程都是6这个值,某些时候,这又是我们想要达到的结果。
利用改变变量值的方式,以及切换线程进行调试,可以更加方便的达到我们想要的调试环境。以上都是个人理解,欢迎补充。
另外,eclipse支持修改代码后自动resume重新执行(虽然某些共享数据可能会无法复原),但是idea似乎不支持。比如我在debug时发现某行代码有个很简单的错误,我修改之后又得重新启动debug,不然改动不会生效,这就很麻烦。
所以这个不知道有没有大神知道怎么解决?