STS 2.5.1 中的全新 Groovy 除錯支援

工程 | Andrew Eisenberg | 2010 年 11 月 30 日 | ...

我們在最近釋出的 SpringSource Tool Suite 2.5.1 中包含了一些 Groovy 除錯的重大改進。一直可以使用 Eclipse 的 vanilla 除錯支援來除錯您的 Groovy 應用程式,但由於 Groovy 與 Java 的語言差異及其超程式設計,許多除錯功能的效果不如預期。

此帖子中的所有螢幕截圖均來自一個簡單的 Grails 應用程式,因此此處的除錯功能隱含地利用了動態新增的 Groovy 方法和屬性。

單步進入

透過增強的 Groovy 除錯支援,“單步進入”命令的工作方式與您期望的完全一致。過去,由於 Groovy 廣泛使用反射和快取的呼叫站點,有時會進入不感興趣的堆疊幀,而可能會跳過感興趣的堆疊幀,這使得除錯有時會令人不愉快。

現在,可以單步進入 Groovy 方法和閉包,忽略所有不感興趣的 Groovy 執行時和框架呼叫

可以在“Groovy -> 偵錯程式 -> 擴充套件除錯支援”首選項頁面中停用此支援

除錯時評估 Groovy 程式碼

當偵錯程式停留在 Groovy 堆疊幀上時,“顯示檢視”和“表示式檢視”現在可以識別 Groovy 語法,並可以完全訪問 Groovy 動態新增的方法和屬性。

在“顯示檢視”中

在“表示式檢視”中

甚至在編輯器中(透過選擇程式碼段並使用 CTRL-Shift-I 鍵盤快捷鍵)

如果您需要停用此支援,也可以從“Groovy -> 偵錯程式 -> 擴充套件除錯支援”首選項頁面中執行此操作

幾乎所有內容

您在除錯應用程式中可以執行的任何操作都應該可以從“顯示檢視”中執行,除了定義新的類、方法、屬性和閉包。 Groovy 是一種大型語言,並且在不斷發展。可能還有其他語言功能尚未得到支援,但基本功能(包括變數定義、迴圈、條件語句和 gstring 列表和對映文字)都可以在評估中使用。

例如,可以新增 Grails 域類的新例項

並迴圈遍歷集合

可能是 Groovy MOP 的最奇怪的用法(關於實現的簡要說明)

Groovy Metaobject Protocol 或 MOP 提供了一種結構化的方式來更改 Groovy 的語義,方法是讓終端使用者控制方法呼叫和屬性訪問。新的 Groovy 除錯支援的核心依賴於 Groovy MOP 進行程式碼評估。運作方式如下:

  • 在每次評估之前,選定的 Groovy 程式碼會被編譯成 STS 執行例項中的指令碼(而不是除錯的應用程式)。
  • 此指令碼和指令碼中引用的所有類的元類都更改為 Java Debug Interface (JDI) 元類。 JDI 定義了一種協議,用於使用偵錯程式透過套接字與除錯的應用程式進行通訊。
  • 透過 JDI,這些元類會取代所有方法呼叫、屬性訪問和建構函式呼叫,以便效果發生在除錯的 JVM 上,而不是本地。您可以將編譯後的指令碼視為一個模擬,它將所有操作委託給除錯的應用程式。

這使我們幾乎可以完全控制 STS 執行例項中的除錯應用程式。 我們感到驚訝和印象深刻的是,Groovy MOP 足夠強大,可以用於在遠端應用程式上執行 Groovy 指令碼。

如果您有任何意見、功能請求或任何對您不起作用的東西,請 提出一個 jira 問題 或者在 SpringSource Tool Suite 論壇上提及它。

獲取 Spring 新聞通訊

透過 Spring 新聞通訊保持聯絡

訂閱

更上一層樓

VMware 提供培訓和認證,以加速您的進步。

瞭解更多

獲取支援

Tanzu Spring 在一個簡單的訂閱中提供對 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位制檔案。

瞭解更多

即將舉行的活動

檢視 Spring 社群中所有即將舉行的活動。

檢視全部