參加你附近的 ,瞭解 VS Code 中的 AI 輔助開發。

除錯容器化應用

“容器工具”擴充套件為在容器內除錯應用程式提供了更多支援,例如為附加偵錯程式到在容器內執行的應用程式搭建 launch.json 配置。

“容器工具”擴充套件提供了一個 docker 除錯配置提供程式,它管理 VS Code 如何啟動應用程式和/或將偵錯程式附加到正在執行的容器中的應用程式。該提供程式透過 launch.json 中的條目進行配置,配置特定於該提供程式支援的每個應用程式平臺。

“容器工具”擴充套件目前支援在容器內除錯 Node.jsPython.NET 應用程式。

要求

僅僅搭建或將啟動配置貼上到 launch.json 中是不足以構建和除錯容器的。要成功執行容器啟動配置,您必須擁有:

  • 一個 Dockerfile。
  • tasks.json 中的 docker-builddocker-run 任務。
  • 一個呼叫這些任務的啟動配置。

如果這些資產都不存在,我們建議使用容器:將 Docker 檔案新增到工作區... 命令來建立這些專案。如果您已經有一個可用的 Dockerfile,我們建議使用容器:為容器除錯初始化命令來搭建啟動配置和與容器相關的任務。

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 要在除錯控制檯輸出中查詢的正則表示式模式。
uriFormat 要啟動的 URI 格式。
webRoot 提供網頁服務的根資料夾。僅在 action 設定為 debugWithChrome 時使用。

node 物件屬性

這些屬性與 VS Code 文件中描述的用於將偵錯程式附加到 Node.js 應用程式的屬性相同。在 node 物件中傳遞的所有屬性都將傳遞給 Node.js 除錯介面卡,即使下面沒有特別列出。

屬性 描述 預設值
port 可選。要使用的除錯埠。 9229
address 可選。除錯埠的 TCP/IP 地址。
sourceMaps 可選。透過將此項設定為 true 來啟用源對映。
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 等)。

後續步驟

繼續閱讀以瞭解更多資訊