Idea Intellij多线程调试

来源:互联网 发布:网络棋牌作弊器 编辑:程序博客网 时间:2024/06/13 13:16

原文:http://blog.csdn.net/fuzzytalker/article/details/50925218


(适用Idea 14 & 15,其他版本未知)

几天前遇到一个问题: 
在多线程调试的时候,一些断点会被跳过。

比如像下面的代码:

public static void main(String[] args) throws InterruptedException {    new Thread() { // 断点0        @Override        public void run() {            System.out.println("1"); // 断点1            try {                Thread.sleep(2000);            } catch (InterruptedException e) {                e.printStackTrace();            }            System.out.println("2"); // 断点2        }    }.start();    // 外线程    System.out.println("3"); // 断点3    Thread.sleep(2000);    System.out.println("4"); // 断点4}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

启动调试后,可能会命中断点1或者断点3,命中路径可以是3->2->4或者3->4甚至3->2,总之并不会命中全部断点。在单步调试的过程中,代码的执行速度事实上远比直接运行慢得多,所以我加入了一些sleep用来模拟这些延迟的过程。

这段代码一共有两个线程,在调试一个线程的过程中,很显然另一个线程是在运行的。所以我们可以猜测是不是Idea是不是会在我们调试一个线程时,屏蔽另一个线程的断点。 
为了验证这个观点,只需要在命中断点0处之后单步,就会到断点3,然会你调试得“慢”一点,就会发现断点1和2被跳过了。

这里写图片描述 
打钩的是我当前调试的线程(main线程),当你开始单步调试之后,这个堆栈会刷新。

这显然是不能接受的,对于多线程调试来说,最重要的就是控制两个线程的执行顺序,我们要做的其实就是当另一个不处于调试状态的线程命中断点后,能先暂停,一直等到我去处理为止。

经过一番折腾后发现,其实Idea提供了这个功能,在断点处右键 
这里写图片描述 
它提供了两种挂起的模式,默认的是All,只需要选中Thread,它就会一直等待到你处理它。 
右边的Make Default功能会使得之后打上的断点也会是Thread模式的(注意,之前打上的不会变更,需要手工更改)。 
这里写图片描述 
两个红圈的按钮就可以改,在Debug窗口的最右边。

之后就可以开心地调试了,对了,在这里切换线程 
这里写图片描述

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 邮箱的附件过期了怎么办 邮箱里的附件过期了怎么办 邮箱中附件过期了怎么办 扣扣邮箱附件过期怎么办 公司网页版邮箱进不去了怎么办 农行客户端密码忘记了怎么办 中国银行客户端密码忘记了怎么办 建行客户端登录密码忘记了怎么办 中国移动客户端密码忘记了怎么办 再歪一点授权码绑定怎么办 网易邮箱号忘了怎么办 忘记支付宝账号和密码怎么办 支付宝账号密码忘了怎么办 发邮箱文件超2g怎么办 报考计算机二级邮箱不存在怎么办 苹果邮箱登录要imap密码怎么办 注销微信支付后怎么办 手机卡注销后支付宝怎么办 12306手机邮箱都换了怎么办 网易手机邮箱手机换了怎么办 崩坏3号被盗了怎么办 qq账号被永久冻结了怎么办 淘宝账号被永久冻结了怎么办 qq账号被永久冻结怎么办 多多理财账号冻结了怎么办 苹果id安全问题忘记了怎么办 网易邮箱帐号忘了怎么办 网易邮箱密码忘记了怎么办 网易邮箱密码忘了怎么办 网易邮箱忘记邮箱账号怎么办 崩坏3三无号被盗怎么办 qq邮箱给58占用怎么办 支付宝邮箱被占用怎么办 苹果手机下载不了qq怎么办 附件预览时发生错误怎么办 手机下载的压缩包打不开怎么办 邮箱提示中转站剩余容量不足怎么办 手机邮箱密码忘记了怎么办 垃圾邮件被系统删除了怎么办 邮箱里的邮件下载不了怎么办 qq邮箱下载不了文件怎么办