URLhttps://learnscript.net/zh-hant/vscode/debugging/
    複製連結移至說明  範例

    Visual Studio Code 偵錯功能使用和設定說明

    閱讀 6:42·字數 2010·發佈 
    Youtube 頻道
    訂閱 480

    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

    launch.json
    {
    	"version": "0.2.0",
    	"configurations": [
    		{
    			"name": "Python 執行目前檔案",
    			"type": "debugpy",
    			"request": "launch",
    			"program": "${file}",
    		}
    	]
    }

    為 Visual Studio Code 執行偵錯新增命令列參數

    組態的args屬性是一個字串陣列,可為執行偵錯新增命令列參數,參數的名稱和值可以合併為一個字串,或分別作為兩個字串。

    這裏,修改之前的組態,新增命令列參數--name--age,它們的值分別為Jack10

    Python 腳本檔案的d.py,顯示了所有的命令列參數。

    launch.json
    {
    	// …
    	"args": ["--name Jack","--age","10"],
    }
    d.py
    import sys
    # 顯示參數
    print(sys.argv)
    ['\d.py', '--name Jack', '--age', '10']

    為 Visual Studio Code 執行偵錯設定環境變數

    當程式的行為相依於環境變數時,你可以在launch.json中為相應的執行偵錯組態設定環境變數。這相對於直接修改作業系統中的環境變數更加靈活。

    要設定環境變數,可以在組態中新增env屬性。該屬性是一個物件,需要設定的環境變數作為物件的屬性出現,環境變數的名稱作為屬性的名稱,環境變數的值作為屬性的值。

    下面,我們為執行偵錯新增了環境變數MYNAME,其值為Tom

    為腳本檔案d.py新增程式碼,顯示環境變數MYNAME

    launch.json
    {
    	// …
    	"env": {
    		"MYNAME": "Tom",
    	},
    }
    d.py
    # …
    import os
    # 顯示環境變數
    print(os.environ.get('MYNAME'))
    Tom

    為 Visual Studio Code 執行偵錯設定目前工作目錄

    組態的cwd屬性,表示了執行偵錯時終端機的目前工作目錄。

    改變 cwd 屬性的可能後果

    通過cwd屬性修改目前工作目錄後,如果program屬性采用了相對路徑,那麽 VSCode 可能無法找到需要偵錯的目標。

    下面,我們變更了目前工作目錄,並在程式碼中顯示了它。

    launch.json
    {
    	// …
    	"cwd": "z:\\",
    }
    d.py
    # …
    # 顯示目前工作目錄
    print(os.getcwd())
    Z:\

    在 Visual Studio Code 執行偵錯前後執行工作

    如果你需要在執行偵錯之前或之後執行一些額外的操作(比如,建立或刪除某個資料夾),那麽可以為組態新增屬性preLaunchTaskpostDebugTask即可,屬性的值是已存在的工作的名稱。

    在下面的範例中,執行偵錯開始之前將執行工作begin,執行偵錯結束之後將執行工作end

    launch.json
    {
    	// …
    	"preLaunchTask": "begin",
    	"postDebugTask": "end",
    }

    原始碼

    launch.json·codebeatme/vscode·GitHub
    d.py·codebeatme/vscode·GitHub

    講解影片

    VSCode 設定 launch.json 執行偵錯程式碼·YouTube
    VSCode 為執行偵錯設定環境變數·YouTube