【问题标题】:How can I modify a variable value while debugging in IntelliJ, so that respective watches are automatically updated?在 IntelliJ 中调试时如何修改变量值,以便自动更新各个手表?
【发布时间】:2022-05-05 22:41:11
【问题描述】:

我有以下代码:

Matcher matchDays = m_daysRegex.matcher(e.getKey());
if (matchDays.matches()){
...
}

e.getKey() 是“周一至周五”。

现在,我已经执行了第一行,站在 if 表达式上。我使用监视窗口评估matchDays.matches() 表达式,然后在matchDays 的各种方法上添加一些监视。然后使用同一个监视窗口,我评估matchDays = m_daysRegex.matcher("Mon,Fri")matchDays.matches() 表达式,看看会发生什么。不幸的是,监视窗口不会自行刷新,也没有明确的按钮来执行此操作:

在上图中,注意matchDays.group(0) 如何显示“Mon,Fri”,而matchDays.group(1) 显示“Mon-Fri”。这是因为我手动刷新了前者,但其余的仍然显示旧值。我必须手动刷新它们,这很烦人。

我做错了吗?有没有正确的方法,所以手表表达式会自动刷新?或者有没有办法刷新整个监视窗口?

谢谢。

【问题讨论】:

    标签: debugging intellij-idea


    【解决方案1】:

    在 IntelliJ 中更改运行时变量的值:

    1. the Variables window 中找到变量。
    2. 右键单击并选择“设置值…”。
    3. 更新值,然后按 Enter。

    【讨论】:

    • 我得到“类型不匹配”只改变一个整数值。它似乎被引用,但无论我是否引用数字都会引发错误。
    • 我得到一个 Optional 类型索引的类型不匹配
    • @another 你可能没有一个“int”,而是一个 java.lang.Long,试试:codenew long(42)code
    【解决方案2】:

    不可能自动刷新它们,因为刷新需要调用实际的方法,这会对调试器和应用程序的语义产生副作用。简单的监视值会自动刷新。

    另请参阅similar request in YouTrack

    【讨论】:

      【解决方案3】:

      添加到@Hari Rao

      我认为需要提及的一件小事很重要,因为它很容易忘记,请确保您尝试修改的变量本身是 var 而不是 val

      否则,“设置值”会变灰。

      【讨论】:

        【解决方案4】:

        在 Android Studio 中也是如此。在调试模式下转到Variables,选择一个变量并按Set Value...。如果您没有看到该变量,请展开 this 列表。

        然后输入一个新值并按 Enter。

        如果你还在Variables 中添加类似someVariable = 1 的内容,调试器将在每次到达断点时更改someVariable 值。

        【讨论】:

          猜你喜欢
          • 2016-08-13
          • 2017-09-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-03
          • 1970-01-01
          相关资源
          最近更新 更多