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 清單和 Map 常值,都可以在評估中使用。

例如,可以新增 Grails 網域類別的新執行個體

並迴圈處理集合

Groovy MOP 的最奇特用法(關於實作的簡短說明)

Groovy Metaobject Protocol 或 MOP 提供了一種結構化的方式來變更 Groovy 的語意,讓終端使用者可以控制方法調用和屬性存取。新的 Groovy 偵錯支援的核心依賴 Groovy MOP 進行程式碼評估。運作方式如下

  • 在每次評估之前,選取的 Groovy 程式碼都會編譯成 STS 執行中執行個體中的指令碼(而非偵錯的應用程式)。
  • 此指令碼和指令碼中引用的所有類別的中繼類別都會變更為 Java 偵錯介面 (JDI) 中繼類別。JDI 定義了一種通訊協定,用於使用偵錯器透過 Socket 與偵錯的應用程式進行通訊。
  • 透過 JDI,這些中繼類別會篡奪所有方法呼叫、屬性存取和建構子調用,以便效果發生在偵錯的 JVM 上,而不是在本機上。您可以將編譯後的指令碼視為一個 Mock 物件,將所有動作委派給偵錯的應用程式。

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

如果您有任何意見、功能要求或遇到任何問題,請提出 Jira 問題,或在 SpringSource Tool Suite 論壇上提及。

取得 Spring 電子報

隨時掌握 Spring 電子報的最新資訊

訂閱

搶先一步

VMware 提供訓練和認證,以加速您的進展。

瞭解更多

取得支援

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

瞭解更多

即將到來的活動

查看 Spring 社群中所有即將到來的活動。

檢視全部