除錯容器化應用
“容器工具”擴充套件為在容器內除錯應用程式提供了更多支援,例如為附加偵錯程式到在容器內執行的應用程式搭建 launch.json
配置。
“容器工具”擴充套件提供了一個 docker
除錯配置提供程式,它管理 VS Code 如何啟動應用程式和/或將偵錯程式附加到正在執行的容器中的應用程式。該提供程式透過 launch.json
中的條目進行配置,配置特定於該提供程式支援的每個應用程式平臺。
“容器工具”擴充套件目前支援在容器內除錯 Node.js、Python 和 .NET 應用程式。
要求
僅僅搭建或將啟動配置貼上到 launch.json
中是不足以構建和除錯容器的。要成功執行容器啟動配置,您必須擁有:
- 一個 Dockerfile。
tasks.json
中的docker-build
和docker-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 |
應用程式的目標平臺。可以是 netCore 或 node 。 |
netCore |
在容器中除錯 .NET 專案的選項。 |
node |
在容器中除錯 Node.js 專案的選項。 |
python |
在容器中除錯 Python 專案的選項。 |
dockerServerReadyAction 物件屬性
屬性 | 描述 |
---|---|
action |
找到模式時要採取的操作。可以是 debugWithChrome 或 openExternally 。 |
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 等)。 |
後續步驟
繼續閱讀以瞭解更多資訊