在Evaluate-Expression和Watches intellij上运行语句之间的区别?

时间:2016-07-08 03:13:28

标签: java eclipse debugging intellij-idea

我正在使用 intellij-idea 进行 Java 开发。而且在几乎所有其他IDE中,有两个选项, evaluate-expression 观察来运行语句并在调试时查看结果。

有人可以解释在这两个问题上运行声明之间的区别是什么?即为什么提供2个选项?

2 个答案:

答案 0 :(得分:1)

主要区别在于手表会被评估多次,而评估表达式仅会手动评估。

想象一下,你有一个表达式object.incrementX()

如果你将它设置为监视表达式,并且你经历了正常的调试过程(运行程序,在断点处停止,步骤,步骤等等),那么你将看到{{1的值多次递增。

如果您评估表达式,那么您可以控制它何时执行。

一般规则是,如果表达式修改状态,那么您应该小心将它放在监视表达式中,否则您可能会得到非常不可预测的结果。

答案 1 :(得分:0)

与表达式评估功能不同,监视中的表达式将作为项目的一部分保留。监视表达式始终在“帧”窗格中当前检查的堆栈帧的上下文中进行计算。

表达式评估只能是“单级”。如果在Expression Evaluation中调用的方法在其正文中有一个断点,则该断点将被忽略。

Evaluate-Expression和watch之间的一个重要区别是,在使用Evaluate Expression时,我们可以更改或修改params(在方法的情况下),或者我们可以添加其他逻辑计算。因此,除了手表功能外,它还可以根据需要通过测试各种样例来调试代码。