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

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

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

對 Cloud Run 服務進行偵錯

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

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

  2. 在「Run/Debug on Cloud Run Emulator」對話方塊中,設定設定的規格:

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

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

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

  4. 針對服務中的每個可偵錯容器,確認或輸入要偵錯的程式所在的遠端容器目錄。

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

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

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

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

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

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

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

    • 查看記錄:使用 Cloud Code 記錄檔探索工具開啟特定部署作業的應用程式記錄
    • 開啟網址:在網路瀏覽器中開啟特定服務的應用程式服務網址
  7. 如果您已在啟動設定中關閉監控模式,但想要變更應用程式並重新建構及重新部署應用程式,請按一下 Cloud Code 狀態列,然後點選「Turn on watch mode」

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

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

    Cloud Run 部署作業的操作列

排解容器建構問題

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

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

  • 如果重新啟動後仍收到相同錯誤,表示 Docker 可能已耗盡磁碟空間。如要進一步瞭解如何清理 Docker 中未使用的物件,請參閱「修剪未使用的 Docker 物件」一文。

  • 試試 Docker 的 磁碟用量擴充功能,以便釋出空間。

設定詳細資料

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

Node.js

改寫要叫用的進入點:

node --inspect=localhost:9229

Python

使用初始化容器安裝 ptvsd 模組,並重寫要叫用的進入點:

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

Go

使用 Init 容器安裝 dlv 偵錯工具,並重寫進入點,讓啟動的偵錯工作階段只與偵錯伺服器 (在無頭模式下) 執行,在啟動時繼續偵錯的程序,接受多個用戶端連線,並在 localhost:56268 上進行偵聽:

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

Java

使用適當的 Java Debug Wire Protocol (JDWP) 設定新增環境 JAVA_TOOLS_OPTIONS,讓 JDWP 偵錯代理程式監聽 5005 連接埠上的通訊 socket 連線,並在偵錯工具附加之前,讓 VM 開始執行:

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

.NET

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

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