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

问题描述:

我正在使用intellij-ideaJava开发。在几乎所有其他IDE中,有2个选项,evaluate-expression手表运行语句并在调试时查看结果。在Evaluate-Expression和Watches intellij上运行语句之间的区别?

有人可以解释在这两个版本上运行声明有什么不同吗?即为什么提供了2个选项?

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

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

如果您将此设置为监视表达式,并且您要经历正常的调试过程(运行程序,停止在断点,步骤,步骤等......),您将看到x的值为增加了很多次。

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

一般规则是,如果表达式修改了状态那么您应该小心地将其置于监视表达式中,否则您可能会得到非常不可预知的结果。

+0

在你的例子中,incrementX()在递增后返回x的值,对吧? –

+0

是的,它可以,但如果它返回无效,那么你仍然可以评估表达式(并导致状态的改变)。 – vikingsteve

与表达式评估功能不同,watch中的表达式作为项目的一部分被持久化。观察表达式总是在当前在“框架”窗格中检查的堆栈框架的上下文中评估。

表达式评估只能是“单级”。如果在表达式评估中调用的方法在其主体内部具有断点,则该断点将被忽略。

Evaluate-Expression和Watch之间的一个重要区别是,在使用Evaluate Expression时,我们可以更改或修改参数(在方法的情况下),或者我们可以为其添加其他逻辑计算。所以随着手表的功能,它还使我们能够在需要时通过测试各种样品情况来随时调试代码。