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,大概率是本人尚未领悟该场景