在 Cloud Shell 適用的 Cloud Code 中偵錯 Cloud Run 服務

透過 Cloud Code for Cloud Shell,您可以使用 skaffold debug 輕鬆對部署至 Cloud Run 的應用程式進行偵錯。如要進一步瞭解如何使用 Skaffold 偵錯,請參閱「使用 Skaffold 偵錯」。

您不必完成手動設定,例如設定通訊埠轉送或插入特定語言偵錯引數。如要進行偵錯,您需要具備 Cloud Code 且包含 skaffold.yaml 設定檔和 launch.json 檔案 (類型為 cloudcode.cloudrun) 在內的 Cloud Run 應用程式。

對 Cloud Run 服務進行偵錯

如要偵錯服務,請按照下列步驟操作:

  1. 如要執行服務並附加偵錯工作階段,請開啟指令面板 (按下 Ctrl/Cmd+Shift+P 鍵,或依序點選「View」(瀏覽) >「Command Palette」(指令面板)),然後執行「Debug on Cloud Run Emulator」(在 Cloud Run 模擬器上偵錯) 指令。

  2. 在「Run/Debug on Cloud Run Emulator」(透過 Cloud Run 模擬器執行/偵錯) 對話方塊中,設定設定的規格:

    • 選擇 Docker 或 Buildpacks 做為建構工具,然後指定 Dockerfile 或 Buildpack。
    • (選用) 如要指定 Dockerfile 目標或建構引數,請按一下「顯示進階建構設定」,然後指定目標或引數。
    • (選用) 如要指定自訂服務名稱、容器映像檔網址、容器通訊埠、服務要使用的身分、專屬 CPU 數量,或要分配給每個容器執行個體的記憶體量,請按一下「顯示進階服務設定」,然後指定值。
    • (選用) 如要指定任何環境變數,請按一下「顯示進階服務設定」,然後按一下「環境變數」,接著指定值。
    • (選用) 如要指定 Cloud SQL 連線,請按一下「連線」,然後每行指定一個連線。

    如要進一步自訂服務的執行方式,可以直接編輯launch.json檔案

  3. 如要開始偵錯服務,請按一下「Debug」

  4. 針對服務中的每個可偵錯容器,確認或輸入遠端容器中的目錄,您想偵錯的程式就位於該目錄中。

    或者,您也可以按 ESC 略過容器偵錯。

    Cloud Code 會為服務中每個可偵錯的容器連結偵錯工作階段。

    根據預設,當應用程式的變更內容自動儲存時,Cloud Code 會重新部署應用程式,並設定新的偵錯工作階段。您可以在專案的啟動設定中,使用 watch 標記切換這項功能。

  5. 如要新增中斷點,請在要偵錯的檔案編輯器邊界中按一下。

    紅色實心圓圈代表有效中斷點,灰色空心圓圈代表已停用的中斷點。

    傳送新要求到服務後,系統會暫停在您指定的行上。

  6. 工作階段完成後,請按一下滑鼠右鍵,使用下列指令:

    • 查看記錄:使用 Cloud Code Logs Explorer,開啟特定 Deployment 的應用程式記錄
    • 開啟網址:在網路瀏覽器中開啟特定服務的應用程式服務網址
  7. 如果您已在啟動設定中關閉監看模式,且想變更應用程式並重建及重新部署應用程式,請按一下 Cloud Code 狀態列,然後按一下「開啟監看模式」

  8. 如要檢查變數和堆疊資訊,請使用偵錯側欄。 如要與偵錯工作階段互動,請使用底部窗格偵錯工具的「Debug Console」。

  9. 如要停止部署作業,請按一下目前部署作業動作列中的「停止」按鈕。

    Cloud Run 部署作業的動作列

排解容器建構問題

如果收到 BUILD_DOCKER_UNKNOWN 錯誤代碼,表示 Docker 有問題。如要解決這個問題,請執行下列一或多項工作:

  • 重新啟動 Docker,然後再次嘗試建構容器。

  • 如果重新啟動後仍發生相同錯誤,可能是 Docker 磁碟空間不足。如要進一步瞭解如何清除 Docker 中未使用的物件,請參閱「修剪未使用的 Docker 物件」。

  • 試用 Docker 的「磁碟用量」擴充功能,協助回收空間。

設定詳細資料

Cloud Code 會處理下列語言專屬的設定詳細資料:

Node.js

重新編寫進入點以叫用:

node --inspect=localhost:9229

Python

使用 Init Container 安裝 ptvsd 模組,並重新編寫進入點來叫用:

python -m ptvsd --host localhost --port 5678

Go

使用 Init Container 安裝 dlv 偵錯工具,並重新編寫進入點,讓啟動的偵錯工作階段只使用偵錯伺服器 (無周邊模式),繼續偵錯程序 (啟動時)、接受多個用戶端連線,並在 localhost:56268 監聽:

dlv exec --headless --continue --accept-multiclient --listen=localhost:56268 --api-version=2, <app> --

Java

新增環境 JAVA_TOOLS_OPTIONS,並使用適當的 Java 偵錯線路通訊協定 (JDWP) 設定,讓 JDWP 偵錯代理程式監聽通訊埠 5005 的 Socket 連線,並允許 VM 在附加偵錯工具前開始執行:

jdwp=transport=dt_socket,server=y,suspend=n,address=5005,quiet=y

.NET

.NET Core 應用程式已設定為與 VS Code 的 vsdbg 一併部署。

如果自動設定發生問題,請參閱「詳細的偵錯工具設定和安裝」一文,瞭解如何排解問題。