除錯 DSLD 指令碼

工程 | Andrew Eisenberg | 2011 年 8 月 2 日 | ...

不久前,我為 Groovy-Eclipse 引入了 DSL 描述符 (DSLDs)。DSLDs 是 Groovy 指令碼,為 Eclipse 工作空間中的 Groovy 專案提供豐富的編輯支援(內容輔助、導航等)。由於 DSLDs 只能在正在執行的 Eclipse 程序中執行,除錯不像啟動 Eclipse 偵錯程式並單步執行 Groovy 指令碼那麼簡單。在本文中,我將介紹一些用於除錯 DSLDs 的簡單和更復雜的技術。

為了使所有這些工作正常執行,您將需要最新的開發版本:

簡單粗暴的方法

除錯 DSLDs 最簡單粗暴的方法是使用 println。這將把表示式列印到執行中的 Eclipse 程序的標準輸出,如果您從命令列啟動 Eclipse,就可以看到這些輸出。然而,我建議改用 log 語句。這會將日誌資訊列印到 Groovy 事件控制檯

正如您在下面的示例中看到的,每次 MethodParams.dsld 中的切點匹配時,vals 的當前值都會列印到 Groovy 事件控制檯。

log 方法可以在 DSLD 指令碼的任何地方使用。事件控制檯中的所有日誌條目都以 "======" 為字首。Groovy 事件控制檯還會顯示指令碼的編譯錯誤和丟擲的異常,因此即使 DSLD 指令碼不包含任何 log 語句,它也相當有用。

不使用事件控制檯時,最好將其關閉,因為跟蹤資訊可能會迅速變大,並最終消耗大量記憶體和處理能力。

高階方法

列印和日誌語句的使用是有限的。透過設定斷點、單步除錯程式碼和執行除錯評估,可以為 DSLDs 提供適當的除錯支援。儘管設定有點複雜,但在除錯複雜指令碼時可能值得。本質上,您需要在 Eclipse 偵錯程式中啟動一個新的 Eclipse 例項(一個執行時工作臺),並透過它來除錯指令碼。 關於 建立 使用 Eclipse 執行時工作臺的資訊,但其中大部分對於 DSLD 除錯來說並非必需。

以下是所需的步驟:

  1. 安裝 Groovy-Eclipse 原始碼(可選,但有助於深入瞭解 DSLDs 的執行方式)。您可以從 Eclipse 的安裝管理器中進行。選擇 Groovy-Eclipse SDK。更多詳細資訊請參見此處
  2. 建立並啟動一個新的空 Eclipse 工作空間。您可以透過從命令列啟動 Eclipse 並使用 -data 引數指定新工作空間的路徑來完成此操作。這個工作空間是宿主工作空間,它將啟動第二個工作空間,您的 DSLD 實際上就在第二個工作空間中。
  3. 在新工作空間中建立一個新的 Groovy 專案,最初為空。
  4. 啟動執行時工作臺。首先開啟啟動配置對話方塊: 然後雙擊 Eclipse application 建立新的啟動配置。在 Workspace Location 部分,選擇包含您的 DSLD 的工作空間的資料夾路徑:
  5. 執行時工作臺啟動後,將要除錯的 DSLD 從執行時工作空間拖放到宿主工作空間中新建立的專案中。執行此操作時,您將看到一個類似以下的對話方塊: 請確保選擇 link(連結)。連結檔案將確保在一個工作空間中所做的更改會反映在另一個工作空間中。我建議使用拖放(而不是其他匯入檔案到工作空間的方式),因為這是確保檔案是連結而非複製的最簡單方法。
  6. 在宿主工作空間中,在 DSLD 的某個位置設定一個斷點。
  7. 在執行時工作臺中執行一些操作,以觸發您的指令碼。例如,將滑鼠懸停在 DSLD 應用到的 Groovy 檔案中的一個有趣的識別符號上。
  8. Eclipse 將在斷點處停止。
  9. Eclipse 第一次在斷點處停止時,原始碼不會出現。
    您必須明確地將新建立的 Groovy 專案新增到 Eclipse 執行時啟動配置的源查詢路徑中。完成此操作後,原始碼將可用。
  10. 恭喜!您現在應該能夠使用偵錯程式除錯您的 DSLDs 了。

變數檢視將正常工作:

如果您安裝了 STS,可以在表示式檢視中執行評估:

在顯示檢視中:

在編輯器中,選擇一個表示式並按下 CTRL-Shift-I 或 CMD-Shift-I(本例中是 names)。

請注意,閉包不允許在評估中使用,並且必須在 Groovy -> Debugger -> Extended Debugging Support 頁面中明確啟用 Groovy 除錯評估。

使用此方法除錯 DSLD 指令碼將幫助您建立更大的指令碼,以支援更復雜的 Groovy DSLs。

獲取 Spring 時事通訊

訂閱 Spring 時事通訊,保持聯絡

訂閱

搶先一步

VMware 提供培訓和認證,助您快速提升。

瞭解更多

獲取支援

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

瞭解更多

近期活動

檢視 Spring 社群的所有近期活動。

檢視全部