Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在idea中使用断点中的条件?_Java_Intellij Idea - Fatal编程技术网

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