IDEA调试卡住的一种场景及解决方法
环境
JDK17 + IntelliJ IDEA 2023.3.4 (Ultimate Edition)
现象
在调试Map.of
那行代码时,在MapN(Object... input)
构造方法的if ((input.length & 1) != 0) {
打上断点,Step Over
到for (int i = 0; i < input.length; i += 2)
时正常,但再执行一次Step Over
就会卡住,debug窗口一直Waiting until last debugger command completes
import java.util.Map;
public class MapTest {
public static void main(String[] args) {
Map<String, String> map = Map.of("1", "One", "2", "Two");
System.out.println(map);
}
}
解决方法
- 点"More"
- 取消勾选
Show Variable Values in Editor
- 再次启动调试,即可正常执行。ps:第一轮for循环执行
table[dest] = k;
之前不要点开this
,否则仍会卡住
原因分析
- 在idea调试控制台,试图查看
this
时,会调用toString()
,实际上调用的是AbstractMap
抽象类的toString()
方法,在该方法中,会调用实现类的next()
方法 - 辗转来到
ImmutableCollections.MapN.MapNIterator
类,调用的就是该类的next()
方法 - 执行到
while (table[idx = nextIndex()] == null) {}
,由于此时table
内元素全是null
,死循环了 - 至此,就明白,不是idea卡住,而是执行到死循环了,“卡住”一段时间CPU风扇开始疯狂…