STS 2.5.1 中新的 Groovy 除錯支援

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

在最近釋出的 SpringSource Tool Suite 2.5.1 中,我們對 Groovy 除錯進行了重大改進。一直以來,都可以使用 Eclipse 對 Java 的標準除錯支援來除錯 Groovy 應用程式,但由於 Groovy 與 Java 的語言差異及其超程式設計,許多除錯功能一直未能正常工作。

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

步進

透過增強的 Groovy 除錯支援,“步入”命令的執行方式與您預期的一模一樣。過去,由於 Groovy 大量使用反射和快取的呼叫站點,有時會步入不感興趣的堆疊幀,而可能會步過感興趣的堆疊幀,這使得除錯體驗有時令人不快。

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

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

在除錯時評估 Groovy 程式碼

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

在顯示檢視中

在表示式檢視中

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

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

幾乎所有

您在除錯應用程式中可以做的任何事情都應該可以透過顯示檢視實現,嗯,幾乎所有事情,除了定義新的類、方法、屬性和閉包。Groovy 是一種大型語言,並且在不斷發展。可能還有其他尚未支援的語言特性,但基本功能,包括變數定義、迴圈、條件語句以及 gstring 列表和對映字面量,都可以在評估中使用。

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

並遍歷集合

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

Groovy 元物件協議 (MOP) 提供了一種結構化的方式來改變 Groovy 的語義,透過讓終端使用者控制方法呼叫和屬性訪問。新的 Groovy 除錯支援的核心依賴於 Groovy MOP 進行程式碼評估。其工作原理如下:

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

這使我們幾乎可以從正在執行的 STS 例項完全控制除錯的應用程式。我們驚訝地發現 Groovy MOP 功能強大,足以用於在遠端應用程式上執行 Groovy 指令碼。

如果您有評論、功能請求或遇到問題,請為此提出 Jira 問題或在SpringSource Tool Suite 論壇上提及。

獲取 Spring 新聞通訊

透過 Spring 新聞通訊保持聯絡

訂閱

領先一步

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

瞭解更多

獲得支援

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位制檔案,只需一份簡單的訂閱。

瞭解更多

即將舉行的活動

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

檢視所有