多线程环境下进行DEBUG

工具使用的是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,不然改动不会生效,这就很麻烦。

所以这个不知道有没有大神知道怎么解决?

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值