我正在使用intellij-idea爲Java開發。在幾乎所有其他IDE中,有2個選項,evaluate-expression和手錶運行語句並在調試時查看結果。在Evaluate-Expression和Watches intellij上運行語句之間的區別?
有人可以解釋在這兩個版本上運行聲明有什麼不同嗎?即爲什麼提供了2個選項?
我正在使用intellij-idea爲Java開發。在幾乎所有其他IDE中,有2個選項,evaluate-expression和手錶運行語句並在調試時查看結果。在Evaluate-Expression和Watches intellij上運行語句之間的區別?
有人可以解釋在這兩個版本上運行聲明有什麼不同嗎?即爲什麼提供了2個選項?
的主要區別在於,手錶被評估許多次,而評估表達僅手動評估。
想象一下,你有一個表達式object.incrementX()
。
如果您將此設置爲監視表達式,並且您要經歷正常的調試過程(運行程序,停止在斷點,步驟,步驟等......),您將看到x
的值爲增加了很多次。
Wheres如果您評估表達式,那麼您可以控制它的執行時間。
一般規則是,如果表達式修改了狀態那麼您應該小心地將其置於監視表達式中,否則您可能會得到非常不可預知的結果。
與表達式評估功能不同,watch中的表達式作爲項目的一部分被持久化。觀察表達式總是在當前在「框架」窗格中檢查的堆棧框架的上下文中評估。
表達式評估只能是「單級」。如果在表達式評估中調用的方法在其主體內部具有斷點,則該斷點將被忽略。
Evaluate-Expression和Watch之間的一個重要區別是,在使用Evaluate Expression時,我們可以更改或修改參數(在方法的情況下),或者我們可以爲其添加其他邏輯計算。所以隨着手錶的功能,它還使我們能夠在需要時通過測試各種樣品情況來隨時調試代碼。
在你的例子中,incrementX()在遞增後返回x的值,對吧? –
是的,它可以,但如果它返回無效,那麼你仍然可以評估表達式(並導致狀態的改變)。 – vikingsteve