Visual Studio Code 偵錯功能使用和設定說明
訂閱 480
VSCode 設定 launch.json 執行偵錯程式碼影片示範 YouTube
Visual Studio Code 偵錯功能
Visual Studio Code(VSCode)的偵錯功能為測試程式碼提供了極大的便利。本文將介紹如何在 VSCode 中執行偵錯程式碼,並解釋部分高級設定。
在 Visual Studio Code 中執行偵錯程式碼
對於某些語言(如 JavaScript、TypeScript),VSCode 已內建了它們的執行偵錯功能,無需安裝其它延伸模組。
其它語言(如 Python、C++),通常需要安裝啟用對應的延伸模組(例如,偵錯 Python 需要安裝延伸模組 Python Debugger)。
要簡單的啟動程式碼的偵錯,你可以開啟一個程式碼檔案。然後,在執行與偵錯面板中點選執行和偵錯按鈕。如果 VSCode 能夠確定采用何種組態,那麽執行偵錯會直接開始。否則,會快顯面板讓你選擇所采用的組態,這些組態通常由 VSCode 自身和所安裝的延伸模組提供。
例如,開啟並執行偵錯一個py腳本檔案,可能會看到組態 Python 檔案,選擇它即可使用 Python 解譯器執行目前的py檔案。
當然,以上的這種方式適用於快速測試單個檔案。如果遇到稍微複雜一些的案例(如傳遞參數、設定環境變數、執行前後工作),那麽就需要進行自訂組態。
Visual Studio Code 中的 launch.json 檔案
launch.json是 VSCode 用於儲存執行偵錯組態的檔案,它位於專案工作區的.vscode資料夾中。通過它,你可以建立並管理自訂的執行偵錯組態。
如何建立執行偵錯組態?
在執行與偵錯面板中點選用於建立launch.json檔案的連結,或使用功能表項執行 | 新增組態…,或在命令選擇區中執行命令Debug: Add Configuration…。
VSCode 將根據你的選擇,來建立新的執行偵錯組態。
launch.json 文字會導致執行與偵錯面板發生變化
一旦你在工作區建立了launch.json檔案,執行與偵錯面板將發生一些變化。比如,其中的執行和偵錯按鈕可能不再顯示。
Visual Studio Code 執行偵錯組態
對於一個執行偵錯組態,通常擁有以下重要的設定(屬性)。
- name 屬性
name屬性是組態的名稱,可顯示在執行與偵錯面板的下拉清單方塊中。- type 屬性
type屬性表示組態的類型。相關語言延伸模組或 VSCode 內建功能將根據該屬性來識別組態。比如,延伸模組 Python Debugger 可識別type屬性為debugpy的組態。- request 屬性
request屬性為要求類型。其有效值launch表示啟動新程式進行偵錯,attach表示連結到已執行的程式進行偵錯。- program 屬性
program屬性為要偵錯的可執行檔案或腳本的路徑。可以是絕對路徑或相對路徑(一般情況下,相對路徑相對於 VSCode 工作區目錄)。
下面的範例中,檔案launch.json包含一個用於執行偵錯目前 Python 檔案的組態。其中program屬性包含了表示目前檔案路徑的 VSCode 變數file。
{
"version": "0.2.0",
"configurations": [
{
"name": "Python 執行目前檔案",
"type": "debugpy",
"request": "launch",
"program": "${file}",
}
]
}為 Visual Studio Code 執行偵錯新增命令列參數
組態的args屬性是一個字串陣列,可為執行偵錯新增命令列參數,參數的名稱和值可以合併為一個字串,或分別作為兩個字串。
這裏,修改之前的組態,新增命令列參數--name和--age,它們的值分別為Jack和10。
Python 腳本檔案的d.py,顯示了所有的命令列參數。
{
// …
"args": ["--name Jack","--age","10"],
}import sys
# 顯示參數
print(sys.argv)['…\d.py', '--name Jack', '--age', '10']為 Visual Studio Code 執行偵錯設定環境變數
VSCode 為執行偵錯設定環境變數影片示範 YouTube
當程式的行為相依於環境變數時,你可以在launch.json中為相應的執行偵錯組態設定環境變數。這相對於直接修改作業系統中的環境變數更加靈活。
要設定環境變數,可以在組態中新增env屬性。該屬性是一個物件,需要設定的環境變數作為物件的屬性出現,環境變數的名稱作為屬性的名稱,環境變數的值作為屬性的值。
下面,我們為執行偵錯新增了環境變數MYNAME,其值為Tom。
為腳本檔案d.py新增程式碼,顯示環境變數MYNAME。
{
// …
"env": {
"MYNAME": "Tom",
},
}# …
import os
# 顯示環境變數
print(os.environ.get('MYNAME'))Tom為 Visual Studio Code 執行偵錯設定目前工作目錄
組態的cwd屬性,表示了執行偵錯時終端機的目前工作目錄。
改變 cwd 屬性的可能後果
通過cwd屬性修改目前工作目錄後,如果program屬性采用了相對路徑,那麽 VSCode 可能無法找到需要偵錯的目標。
下面,我們變更了目前工作目錄,並在程式碼中顯示了它。
{
// …
"cwd": "z:\\",
}# …
# 顯示目前工作目錄
print(os.getcwd())Z:\在 Visual Studio Code 執行偵錯前後執行工作
如果你需要在執行偵錯之前或之後執行一些額外的操作(比如,建立或刪除某個資料夾),那麽可以為組態新增屬性preLaunchTask或postDebugTask即可,屬性的值是已存在的工作的名稱。
在下面的範例中,執行偵錯開始之前將執行工作begin,執行偵錯結束之後將執行工作end。
{
// …
"preLaunchTask": "begin",
"postDebugTask": "end",
}原始碼
launch.json·codebeatme/vscode·GitHub
d.py·codebeatme/vscode·GitHub
講解影片
VSCode 設定 launch.json 執行偵錯程式碼·YouTube
VSCode 為執行偵錯設定環境變數·YouTube