檢查啟動組態檔
- 11 分鐘
您已經看到 Visual Studio Code 使用 launch.json 檔案來設定除錯程式。 如果您要建立簡單的 C# 控制台應用程式,Visual Studio Code 可能會產生 launch.json 檔案,其中包含成功偵錯程式代碼所需的所有資訊。 不過,在某些情況下,您需要修改啟動組態,因此請務必瞭解啟動組態的屬性。
啟動組態的屬性
launch.json 檔案包含清單中的一或多個啟動組態 configurations 。 啟動組態會使用屬性來支援不同的偵錯案例。 下列屬性是每個啟動組態的必要屬性:
-
name:指派給啟動組態的讀取器易記名稱。 -
type:用於啟動組態的調試程序類型。 -
request:啟動組態的要求類型。
本節會定義您可能會遇到的某些屬性。
名稱
屬性 name 會指定啟動組態的顯示名稱。 指派給 name 的值會出現在 [啟動組態] 下拉式清單中(在 [執行和偵錯] 檢視頂端的控制面板上)。
類型
屬性 type 會指定要用於啟動組態的調試程序類型。 的值 codeclr 會指定 .NET 5+ 和 .NET Core 應用程式的調試程序類型(包括 C# 應用程式)。
請求
屬性 request 會指定啟動組態的要求類型。 目前支援和 launch 值attach。
PreLaunchTask
屬性 preLaunchTask 會指定要在偵錯程式之前執行的工作。 工作本身可以在 tasks.json 檔案中找到,該檔案位於 .vscode 資料夾中,以及 launch.json 檔案中。 指定啟動應用程式之前執行命令的builddotnet build預先啟動工作。
程式
屬性 program 會設定為要啟動之應用程式 dll 或 .NET Core 主機可執行文件的路徑。
這個屬性的格式通常為: ${workspaceFolder}/bin/Debug/<target-framework>/<project-name.dll>。
地點:
-
<target-framework>是正在建置偵錯項目的架構。 這個值通常會在項目檔中找到為 『TargetFramework』 屬性。 -
<project-name.dll>是偵錯專案組建輸出 dll 的名稱。 此屬性通常與項目檔名稱相同,但擴展名為 『.dll』。
例如:${workspaceFolder}/bin/Debug/net7.0/Debug101.dll
備註
.dll 擴展名表示此檔案是動態連結庫 (dll) 檔案。 如果您的專案名為 Debug101,當建置工作使用 Program.cs 和 Debug101.csproj 檔案編譯程式時,就會建立名為Debug101.dll的檔案。 您可以展開 [bin] 和 [偵錯] 資料夾,然後在 EXPLORER 檢視中找到 Debug101.dll 檔案,然後開啟代表程式代碼專案所使用的 .NET Framework 的資料夾,例如 “net7.0”。 .NET Framework 版本是在 .csproj 檔案中指定。
Cwd
屬性 cwd 會指定目標進程的工作目錄。
參數
屬性 args 會指定在啟動時傳遞至您程式的自變數。 根據預設,沒有任何自變數。
控制台
屬性 console 會指定啟動應用程式時所使用的主控台類型。 選項有 internalConsole、integratedTerminal 和 externalTerminal。 預設設定是 internalConsole。 主控台型態定義為:
- 此
internalConsole設定會對應至 Visual Studio Code 編輯器下方 [面板] 區域中的 [偵錯控制台] 面板。 - 此
integratedTerminal設定會對應至 Visual Studio Code 編輯器下方 [面板] 區域中的 [輸出] 面板。 - 此
externalTerminal設定會對應至外部終端機視窗。 Windows 隨附的命令提示字元應用程式是終端機視窗的範例。
這很重要
[偵錯主控台] 面板不支援主控台輸入。 例如,如果應用程式包含 Console.ReadLine() 語句,就無法使用 DEBUG CONSOLE。 當您使用讀取使用者輸入的 C# 主控台應用程式時, console 設定必須設定為 integratedTerminal 或 externalTerminal。 寫入主控台但未從主控台讀取輸入的主控台應用程式,可以使用這三 console 個設定中的任何一個。
停止進入
如果您需要在目標的進入點停止,您可以選擇性地設定 stopAtEntry 為 true。
編輯啟動組態
您可能需要自定義啟動組態檔時,有許多案例。 其中許多案例涉及進階或複雜的專案案例。 本課程模組著重於更新啟動組態檔時所需的兩個簡單案例:
- 您的 C# 主控台應用程式會從主控台讀取輸入。
- 您的專案工作區包含多個應用程式。
更新啟動組態以容納控制台輸入
如您稍早閱讀,[偵錯控制台] 面板不支援主控台輸入。 如果您要偵錯依賴使用者輸入的主控台應用程式,您必須在相關聯的啟動組態中更新 console 屬性。
若要編輯 console 屬性:
在 Visual Studio Code 編輯器中開啟 launch.json 檔案。
找出 主控台 屬性。
選取冒號和指派的值,然後輸入冒號字元。
請注意,當您以冒號覆寫現有資訊時,Visual Studio Code IntelliSense 會在下拉式清單中顯示三個選項。
選取 整合式Terminal 或 externalTerminal。
儲存 launch.json 檔案。
更新啟動組態以容納多個應用程式
如果您的工作區只有一個可啟動的專案,C# 擴充功能會自動產生 launch.json 檔案。 如果您有一個以上的可啟動專案,則必須手動修改 launch.json 檔案。 Visual Studio Code 會使用您可以更新的基本範本來產生 launch.json 檔案。 在此案例中,您會為每個您想要偵錯的應用程式建立個別的組態。 預先啟動工作,例如建置工作,可以在 tasks.json 檔案中建立。
假設您正在處理包含數個主控台應用程式的程式代碼撰寫專案。 當您使用程式代碼時,根專案資料夾 SpecialProjects 是您在 Visual Studio Code 中開啟的工作區資料夾。 您有兩個正在開發的應用程式,Project123 和 Project456。 您可以使用 [執行和偵錯] 檢視來偵錯應用程式。 您要從使用者介面選取您要偵錯的應用程式。 您也想要在將調試程式附加至應用程式之前,先編譯任何已儲存的程式代碼更新。
您可以藉由更新 launch.json 和 tasks.json 檔案,來達到此案例的需求。
下列螢幕快照顯示 EXPLORER 檢視和包含 Project123 和 Project456 的資料夾結構。
請注意, .vscode 包含 launch.json 和 tasks.json 檔案的資料夾與工作區資料夾 SpecialProjects 相關聯,而不是個別項目資料夾。
下列範例示範如何設定 launch.json 檔案,以包含 「Project123」 和 「Project456」 應用程式的組態。
"version": "0.2.0",
"configurations": [
{
"name": "Launch Project123",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "buildProject123",
"program": "${workspaceFolder}/Project123/bin/Debug/net7.0/Project123.dll",
"args": [],
"cwd": "${workspaceFolder}/Project123",
"console": "internalConsole",
"stopAtEntry": false
},
{
"name": "Launch Project456",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "buildProject456",
"program": "${workspaceFolder}/Project456/bin/Debug/net7.0/Project456.dll",
"args": [],
"cwd": "${workspaceFolder}/Project456",
"console": "internalConsole",
"stopAtEntry": false
}
]
請注意,已針對特定應用程式設定 名稱、 preLaunchTask 和 程式 字段。
name 屬性會指定 RUN AND DEBUG 檢視使用者介面中顯示的可選取啟動選項,程式屬性會指定應用程式的路徑。 preLaunchTask 屬性可用來指定啟動調試程式之前執行的工作名稱。 tasks.json 檔案包含具名工作,以及完成工作所需的資訊。
下列範例示範如何設定 tasks.json 檔案。 在此情況下,具名工作會指定 「Project123」 和 「Project456」 應用程式特有的建置作業。 建置工作可確保任何已儲存的編輯都會在附加至調試程序的對應 .dll 檔案中編譯和表示。
"version": "2.0.0",
"tasks": [
{
"label": "buildProject123",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/Project123/Project123.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
},
{
"label": "buildProject456",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/Project456/Project456.csproj",
"/property:GenerateFullPaths=true",
"/consoleloggerparameters:NoSummary"
],
"problemMatcher": "$msCompile"
}
]
當您更新 launch.json 和 tasks.json 檔案時,RUN AND DEBUG 檢視會顯示啟動選項以偵錯 Project123 或 Project456 應用程式。 下列螢幕快照顯示 [啟動組態] 下拉式清單中顯示的啟動組態名稱:
回顧
以下是本單元中要記住的兩個重要事項:
- 啟動群組態可用來指定屬性,例如
name、type、request、、preLaunchTaskprogram和console。 - 開發人員可以編輯啟動組態,以配合專案需求。