除錯容器化應用程式

Container Tools 擴充功能針對容器內應用程式的除錯提供了更多支援,例如透過 Scaffolding (鷹架) 產生 launch.json 設定,以便將偵錯工具附加至容器內執行的應用程式。

Container Tools 擴充功能提供了一個 docker 除錯設定提供者,用以管理 VS Code 如何啟動應用程式及/或將偵錯工具附加至正在執行的容器中的應用程式。此提供者透過 launch.json 中的項目進行設定,且設定內容會針對該提供者所支援的各個應用程式平台而有所不同。

Container Tools 擴充功能目前支援在容器內對 Node.jsPython.NET 應用程式進行除錯。

必要條件

僅透過 Scaffolding 或貼上除錯設定至 launch.json不足以建置並對容器進行除錯的。若要成功執行容器除錯設定,您必須具備:

  • 一個 Dockerfile。
  • tasks.json 中的 docker-builddocker-run 工作。
  • 一個呼叫這些工作的除錯設定。

若這些資產尚未存在,我們建議使用 Containers: Add Docker Files to Workspace... 指令來建立它們。如果您已經有一個功能正常的 Dockerfile,我們建議使用 Containers: Initialize for container debugging 指令來產生除錯設定與容器相關工作。

Node.js

關於在容器內對 Node.js 應用程式進行除錯的更多資訊,請參閱 在容器內進行 Node.js 除錯

用於對 Node.js 應用程式進行除錯的 launch.json 設定範例

{
  "configurations": [
    {
      "name": "Containers: Node.js Launch",
      "type": "docker",
      "request": "launch",
      "preLaunchTask": "docker-run: debug",
      "platform": "node"
    }
  ]
}

Python

關於在容器內對 Python 應用程式進行除錯的更多資訊,請參閱 在容器內進行 Python 除錯

用於對 Python 應用程式進行除錯的 launch.json 設定範例

{
  "configurations": [
    {
      "name": "Containers: Python - Django",
      "type": "docker",
      "request": "launch",
      "preLaunchTask": "docker-run: debug",
      "python": {
        "pathMappings": [
          {
            "localRoot": "${workspaceFolder}",
            "remoteRoot": "/app"
          }
        ],
        "projectType": "django"
      }
    }
  ]
}

.NET

您可以在容器內建置與除錯專案時選擇兩種方式

  • 使用 .NET SDK:如果您熟悉 MSBuild 或希望在沒有 Dockerfile 的情況下容器化您的專案,這是建議的選項。

    注意:此選項僅適用於 .NET SDK 7 及以上版本,並使用 dotnet publish 指令來建置映像檔。

  • 使用 Dockerfile:如果您偏好使用 Dockerfile 自訂您的專案,請選擇此選項。

關於這兩個選項的更多詳細資料,請參閱 在容器內進行 .NET 除錯

使用 Dockerfile 對 .NET 應用程式進行除錯的 launch.json 設定範例

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Containers: .NET Launch",
      "type": "docker",
      "request": "launch",
      "preLaunchTask": "Run Container",
      "netCore": {
        "appProject": "${workspaceFolder}/project.csproj"
      }
    }
  ]
}

設定參考

屬性 說明
containerName 用於除錯的容器名稱。
dockerServerReadyAction 將瀏覽器啟動至容器的選項。與 serverReadyAction 類似,但會將容器連接埠替換為主機連接埠。
removeContainerAfterDebug 除錯完成後是否移除除錯容器。
platform 應用程式的目標平台。可以是 netCorenode
netCore 在容器中進行 .NET 專案除錯的選項。
node 在容器中進行 Node.js 專案除錯的選項。
python 在容器中進行 Python 專案除錯的選項。

dockerServerReadyAction 物件屬性

屬性 說明
action 當找到模式時所採取的動作。可以是 debugWithChromeopenExternally
containerName 與主機連接埠對應的容器名稱。
pattern 要在「除錯主控台」(Debug console) 輸出中搜尋的正規表示式模式。
uriFormat 要啟動的 URI 格式。
webRoot 提供網頁服務的根目錄。僅在 action 設定為 debugWithChrome 時使用。

node 物件屬性

這些屬性與 VS Code 文件中所描述用於將偵錯工具附加至 Node.js 應用程式的屬性相同。所有傳入 node 物件的屬性都會被傳遞至 Node.js 除錯轉接器,即使未明確列於下方亦然。

屬性 說明 預設值
port 選用。要使用的除錯連接埠。 9229
address 選用。除錯連接埠的 TCP/IP 位址。
sourceMaps 選用。將此設定為 true 可啟用來源對應 (source maps)。
outFiles 選用。用於定位已產生 JavaScript 檔案的 Glob 模式陣列。
autoAttachChildProcesses 選用。追蹤除錯對象的所有子程序,並自動附加至以除錯模式啟動的子程序。
timeout 選用。重新啟動工作階段時,等待此毫秒數後放棄。
stopOnEntry 選用。程式啟動時立即中斷。
localRoot 選用。VS Code 的根目錄。 根工作區資料夾。
remoteRoot 選用。容器內 Node 的根目錄。 /usr/src/app
smartStep 選用。嘗試自動跳過未對應至原始程式檔的程式碼。
skipFiles 選用。自動跳過這些 Glob 模式所涵蓋的檔案。
trace 選用。啟用診斷輸出。

python 物件屬性

屬性 說明 預設值
host 遠端除錯的主機。
port 遠端除錯的連接埠。 5678
pathMappings 對應本機與遠端主機之間的專案路徑。
projectType 您的 Python 專案類型,Flask 專案為 flask,Django 為 django,FastAPI 為 fastapi,其他則為 general。專案類型將用於設定除錯時使用的連接埠與指令。
justMyCode 僅對使用者撰寫的程式碼進行除錯。
django Django 除錯。 false
jinja Jinja 樣板除錯 (例如 Flask)。 false

netCore 物件屬性

傳入 netCore 物件的屬性通常會被傳遞至 .NET 除錯轉接器,即使未明確列於下方亦然。完整的偵錯工具屬性列表請參閱 OmniSharp VS Code 擴充功能文件

屬性 說明
appProject 要除錯的 .NET 專案 (.csproj, .fsproj 等)。

後續步驟

繼續閱讀以深入了解:

© . This site is unofficial and not affiliated with Microsoft.