Java 如何在idea中使用断点中的条件?
我已经反复尝试了很长一段时间,但不知何故它不起作用 我也试过使用分号和不使用分号。我还试着在断点之前运行这一行,以确保条件真正起作用Java 如何在idea中使用断点中的条件?,java,intellij-idea,Java,Intellij Idea,我已经反复尝试了很长一段时间,但不知何故它不起作用 我也试过使用分号和不使用分号。我还试着在断点之前运行这一行,以确保条件真正起作用 logger.error("I am Here! " + "#PDU Elements: " + pdu.getVariables().size()); 它会像预期的那样返回13 有人知道如何让它工作吗 编辑 根据请求,我将在断点处添加代码行 logger.error("I am Here! " + "#PDU Elements: " + pdu.getVar
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
问题似乎与这个想法有关,因为它会随机错过一些断点。我还尝试了一些无条件断点(应该总是停止),这些断点只在特定时间停止。在断点处快速按两次
CTRL+SHIFT+F8
将打开一个对话框,而不是弹出对话框来配置条件。然后按F1打开帮助对话框
正如intellij帮助文档所述,断点条件是:
选中此复选框并在文本字段中指定命中断点的条件。
条件是Java布尔表达式(包括返回true或false的方法),例如str1.equals(str2)。
此表达式应在设置断点的行中有效,并在每次到达断点时进行计算。如果评估结果为真,则执行用户选择的操作。
如果结果为false,则断点不会产生任何效果。如果调试器无法计算表达式,则会显示条件计算错误消息。您可以选择是要在此断点处停止还是忽略它。
字段/方法/异常断点的条件是在给定字段/方法/异常的上下文中计算的。
在条件字段的右侧,有一个按钮(Shift+Enter)可打开多行编辑器
注
断点条件与java代码一致,因此条件中发生的任何错误都将在断点处停止。并且它不支持任何lambda表达式。使用多个语句计算条件时,需要使用return
语句返回结果
和该条件通常抛出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
}
我的断点条件屏幕截图
您需要将条件断点放在一行,该行可以计算该行上的给定条件,如果该行不能计算该条件,则调试器将永远不会在该行停止 例如:-
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());
}
}
}
公共类DebbuerEx{
公共静态void main(字符串[]args){
HashMap=newHashMap();
地图放置(“Amit”、“k”);
地图放置(“斋浦尔”、“拉贾斯坦邦”);
如果(真){
//地图。删除(“Amit”);
}
对于(Map.Entry:Map.entrySet()){
System.out.println(entry.getKey()+“”+entry.getValue());
}
}
}
在上面的代码中,如果我像下面的屏幕截图一样放置一个条件断点,它将永远不会停止
但是如果将if条件更改为
if(map.containsKey(“Amit”))
,那么相同的条件断点将在那里停止。您应该检查是否已启用调试,并且它将在此行中无条件停止
检查Intellij IDEA中的静音断点按钮
已更新
检查已安装的插件。尝试禁用其中的一些功能。可能有更好的方法来执行您想要的操作,但至少可以将值存储在代码中的变量中,例如:
int k=pdu.getVariables().size()代码>
然后使用其值:
k==13
作为断点的条件。只需在断点上单击鼠标右键
CTRL+Shift+F8
或CMD+Shift+F8
查看所有活动断点
你能把这个条件放在你的代码中,看看它是否会停在那里吗?@AmitK记录程序中写的代码片段就放在断点之前。它打印正确,因此我确信条件已满。您是否也可以提供您的代码行,将此条件断点放在何处?出于测试目的,您是否可以将值存储在变量中,例如
int k=pdu.getVariables().size()
并简单地将k==13
作为一个条件,然后检查这是否有效?@patrik,您放置条件断点的行没有匹配的条件pdu.getVariables().size()
,这就是它没有停止的原因。我也查看了这个帮助部分。实际上,它没有说明任何工作示例,这有点令人难过,因为条件必须看起来像这样int k=pdu.getVariables().size();k==13
,我认为这非常奇怪,可能是个bug。@patrik multi语句应该添加一个return
关键字。代码支持java语法。e、 g:intk=pdu.getVariables().size();返回k==13代码>@patrik,我添加了类似的条件,它会在me@patrik正如我所说,这是java代码,可能您的条件会抛出一个NullPointerException
来中断。我测试了不支持lambda表达式的条件,所以你们需要用三元运算符语句来转换它。请尝试此pdu.getVariables()==null?false:pdu.getVariables().size()==13
@holi java是的,我看了一下,似乎有一个bug。我也尝试过一些其他的东西(为什么我不能回答所有的评论)。我会考虑删除这个问题,因为这个问题可视为误导。实际上,我的意思是在断点中把结果存储在变量<代码> K<代码>中。所以断点条件是intk=pdu.getVariables().size();k==13代码>。这是可行的,但直接评估不行。它看起来很像一个bug,但是很难说它是不是有意的
k==13