如何在想法中使用断点中的条件?

时间:2017-05-22 13:42:17

标签: java intellij-idea

我已经来回试了很长时间,但不管怎样它都行不通。

enter image description here

我也尝试过使用分号和不使用分号。我还尝试在断点之前运行此行以确保条件真正起作用,

logger.error("I am Here! " + "#PDU Elements: " + pdu.getVariables().size());

并按预期返回13.

有谁知道如何让它发挥作用?

修改

根据要求,我将在断点处添加代码行

logger.error("I am Here! " + "#PDU Elements: " + pdu.getVariables().size());
Trap trap = Trap.createTrapFrom(variableMap, instanceIdentificationNumber); // Breakpoint in margin on this line.

编辑2

问题似乎与IDEA随机错过一些断点有关。我也尝试了一些无条件断点(应该总是停止),这些断点只在特定时间停止。

5 个答案:

答案 0 :(得分:4)

在断点处快速按CTRL+SHIFT+F8两次将打开一个对话框而不是弹出对话框来配置条件。然后按F1打开帮助对话框。

as intellij帮助文档说断点条件是:

  

选中此复选框并指定在文本字段中命中断点的条件。   条件是Java布尔表达式(包括返回true或false的方法),例如str1.equals(str2)。   此表达式应在设置断点的行有效,并在每次到达断点时进行计算。如果评估结果为true,则执行用户选择的操作。   如果结果为false,则断点不会产生任何影响。如果调试器无法计算表达式,则会显示Condition评估错误消息。您可以选择是否要在此断点处停止或忽略它。   字段/方法/异常断点的条件在给定字段/方法/异常的上下文中计算。   在Condition字段的右侧,有一个按钮(Shift + Enter),用于打开多行编辑器。

注意

断点条件由java代码组成,因此在条件中发生的任何错误都将在断点处停止。并且它不支持任何lambda表达式。当您使用多语句计算条件时,需要使用return语句返回结果。

AND 条件通常会抛出NullPointerException来停止断点。你需要在断点条件下检查null

//change the condition
pdu.getVariables().size() == 13
                  ^-----throws a NullPointerException if variables is null

//to the condition using ternary operator for checking null
pdu.getVariables()==null ? false : pdu.getVariables().size()==13

实施例

例如:

private String[] run(Class<?> mainClass
     , Optional<String> launcherClass, String[] args) {
    ...
    ^-----I mark a breakpoint here
}

我的状况是并且记得检查条件复选框:

launcherClass != null

我的断点条件截图

enter image description here

答案 1 :(得分:0)

您需要将条件断点放在一行,该行可以评估该行的给定条件,如果该行无法评估该条件,那么您的调试器将永远不会在该行停止。

例如: -

public class DebbuerEx {

    public static void main(String[] args) {
        HashMap<String,String > map = new HashMap<>();
        map.put("Amit","k");
        map.put("Jaipur","Rajasthan");
        if(true) {
            //map.remove("Amit");
        }
        for(Map.Entry<String,String> entry : map.entrySet() ) {
            System.out.println(entry.getKey() + " " + entry.getValue());
        }
    }
}

在上面的代码中,如果我放置一个像屏幕截图下面的条件断点,它将永远不会停止。

enter image description here

但是如果将if条件更改为if(map.containsKey("Amit")),则相同的条件断点将停在那里。

答案 2 :(得分:0)

您应该检查是否启用了调试,并且它在没有条件的情况下在此行中停止。

检查Intellij IDEA中的静音断点按钮。

<强>已更新

检查已安装的插件。尝试禁用其中一些。

答案 3 :(得分:0)

可能有更好的方法来做你想要的,但至少你可以将值存储在代码中的变量中,例如:

int k = pdu.getVariables().size();

然后使用它的值:

k==13 

作为断点的条件。

答案 4 :(得分:0)

只需在您的断点上单击Right Mouse Button

enter image description here

CTRL+Shift+F8CMD+Shift+F8来查看所有活动断点 enter image description here