IDEA调试卡住的一种场景及解决方法

在使用JDK17和IntelliJIDEA2023.3.4调试Map.of时遇到卡顿问题,原因是当尝试查看变量时触发死循环。解决方法是取消显示编辑器中的变量值并重新启动调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IDEA调试卡住的一种场景及解决方法

环境

JDK17 + IntelliJ IDEA 2023.3.4 (Ultimate Edition)

现象

在调试Map.of那行代码时,在MapN(Object... input)构造方法的if ((input.length & 1) != 0) {打上断点,Step Overfor (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);
    }
}

在这里插入图片描述

解决方法

  1. 点"More"
    在这里插入图片描述
  2. 取消勾选Show Variable Values in Editor
    在这里插入图片描述
  3. 再次启动调试,即可正常执行。ps:第一轮for循环执行table[dest] = k;之前不要点开this,否则仍会卡住
    在这里插入图片描述

原因分析

  1. 在idea调试控制台,试图查看this时,会调用toString(),实际上调用的是AbstractMap抽象类的toString()方法,在该方法中,会调用实现类的next()方法
  2. 辗转来到ImmutableCollections.MapN.MapNIterator类,调用的就是该类的next()方法
  3. 执行到while (table[idx = nextIndex()] == null) {},由于此时table内元素全是null死循环
  4. 至此,就明白,不是idea卡住,而是执行到死循环了,“卡住”一段时间CPU风扇开始疯狂…
    在这里插入图片描述
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值