我已经来回试了很长时间,但不管怎样它都行不通。
我也尝试过使用分号和不使用分号。我还尝试在断点之前运行此行以确保条件真正起作用,
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随机错过一些断点有关。我也尝试了一些无条件断点(应该总是停止),这些断点只在特定时间停止。
答案 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
答案 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());
}
}
}
在上面的代码中,如果我放置一个像屏幕截图下面的条件断点,它将永远不会停止。
但是如果将if条件更改为if(map.containsKey("Amit"))
,则相同的条件断点将停在那里。
答案 2 :(得分:0)
您应该检查是否启用了调试,并且它在没有条件的情况下在此行中停止。
检查Intellij IDEA中的静音断点按钮。
<强>已更新强>
检查已安装的插件。尝试禁用其中一些。
答案 3 :(得分:0)
可能有更好的方法来做你想要的,但至少你可以将值存储在代码中的变量中,例如:
int k = pdu.getVariables().size();
然后使用它的值:
k==13
作为断点的条件。
答案 4 :(得分:0)