debug spark源码时踩坑之 idea debug模式
现象
最近在远程debug spark程序方便自己理解源码时,在一处启动了多线程的地方,死活进不去另一个线程的debug断点,但是程序确认是执行了的,代码如下:
在第二个和第三个断点处无法进入。
上网搜索后,原来是idea 的默认debug模式问题,默认是不开启多线程的.
修复
1.右键debug断点或点击左下角打开查看断点页面
2.在debug修改选项中,将suspend选择为thread,同时为了以后方便,设置为make default。
idea debug的suspend的all 和thread区别
简单来说,all就是,所有的线程来了,哪个断点先运行到就进行中断并debug,此时就阻塞了一个线程,那么剩下的线程就不会被阻塞,会直接运行,不会进入debug。
thread则是线程级别阻塞,每个线程独立阻塞进入debug,需要手动让每个线程都运行。
总结
这个小坑,用了这么久idea确实不知道,看来自己多线程的开发还是太少了。
默认情况下,打debug肯定是期望进入的,所以默认thread适用于大部分场景。
不知道idea处于什么考虑默认设置为all,大概率是本人尚未领悟该场景