除錯容器化應用程式
Container Tools 擴充功能針對容器內應用程式的除錯提供了更多支援,例如透過 Scaffolding (鷹架) 產生 launch.json 設定,以便將偵錯工具附加至容器內執行的應用程式。
Container Tools 擴充功能提供了一個 docker 除錯設定提供者,用以管理 VS Code 如何啟動應用程式及/或將偵錯工具附加至正在執行的容器中的應用程式。此提供者透過 launch.json 中的項目進行設定,且設定內容會針對該提供者所支援的各個應用程式平台而有所不同。
Container Tools 擴充功能目前支援在容器內對 Node.js、Python 和 .NET 應用程式進行除錯。
必要條件
僅透過 Scaffolding 或貼上除錯設定至 launch.json 是不足以建置並對容器進行除錯的。若要成功執行容器除錯設定,您必須具備:
- 一個 Dockerfile。
tasks.json中的docker-build和docker-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 |
應用程式的目標平台。可以是 netCore 或 node。 |
netCore |
在容器中進行 .NET 專案除錯的選項。 |
node |
在容器中進行 Node.js 專案除錯的選項。 |
python |
在容器中進行 Python 專案除錯的選項。 |
dockerServerReadyAction 物件屬性
| 屬性 | 說明 |
|---|---|
action |
當找到模式時所採取的動作。可以是 debugWithChrome 或 openExternally。 |
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 等)。 |
後續步驟
繼續閱讀以深入了解: