除錯 DSLD 指令碼

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

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

要使所有這些工作,您需要最新的開發版本

簡單而粗糙

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

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

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

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

高階

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

以下是所需步驟

  1. 安裝 Groovy-Eclipse 原始碼(可選,但對於深入瞭解 DSLD 如何執行很有用)。您可以從 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. 恭喜!您現在應該能夠使用偵錯程式除錯您的 DSLD 了。

變數檢視將正常工作:

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

在顯示檢視中:

在編輯器中,選擇一個表示式並執行 CTRL-Shift-I 或 CMD-Shift-I(在本例中為 names

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

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

獲取 Spring 新聞通訊

透過 Spring 新聞通訊保持聯絡

訂閱

領先一步

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

瞭解更多

獲得支援

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

瞭解更多

即將舉行的活動

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

檢視所有