參加你附近的 ,瞭解 VS Code 中的 AI 輔助開發。

在 VS Code 中除錯 Python

Python 擴充套件透過 Python 偵錯程式擴充套件支援除錯多種型別的 Python 應用程式。有關基本除錯的簡短演練,請參閱教程 - 配置和執行偵錯程式。另請參閱 Flask 教程。這兩個教程都演示了設定斷點和單步執行程式碼等核心技能。

有關檢查變數、設定斷點和其他與語言無關的活動等通用除錯功能,請參閱 VS Code 除錯

本文主要介紹 Python 特有的除錯配置,包括特定應用型別和遠端除錯所需的步驟。

Python 偵錯程式擴充套件

Python 偵錯程式擴充套件隨 VS Code 的 Python 擴充套件自動安裝。它透過 debugpy 為多種型別的 Python 應用程式提供除錯功能,包括指令碼、Web 應用程式、遠端程序等。

要驗證它是否已安裝,請開啟擴充套件檢視 (⇧⌘X (Windows, Linux Ctrl+Shift+X)) 並搜尋 @installed python debugger。您應該會在結果中看到 Python 偵錯程式擴充套件。

Python Debugger extension shown in installed extensions view in VS Code.

您可以查閱擴充套件的 README 頁面,瞭解受支援的 Python 版本資訊。

初始化配置

配置驅動 VS Code 在除錯會話期間的行為。配置在 launch.json 檔案中定義,該檔案儲存在工作區的 .vscode 資料夾中。

注意:要更改除錯配置,您的程式碼必須儲存在一個資料夾中。

要初始化除錯配置,首先在側邊欄中選擇執行檢視

Run icon

如果您尚未定義任何配置,您將看到一個執行和除錯按鈕和一個建立配置 (launch.json) 檔案的連結

Debug toolbar settings command

要生成包含 Python 配置的 launch.json 檔案,請執行以下步驟

  1. 選擇建立 launch.json 檔案連結(如上圖所示)或使用執行 > 開啟配置選單命令。

  2. 從偵錯程式選項列表中選擇 Python 偵錯程式

  3. 命令面板將開啟一個配置選單,允許您選擇要用於 Python 專案檔案的除錯配置型別。如果您想除錯單個 Python 指令碼,請在出現的選擇除錯配置選單中選擇 Python 檔案

    List of Python debugger configuration options

    注意:當沒有配置時,透過除錯面板、F5執行 > 開始除錯啟動除錯會話也會彈出除錯配置選單,但不會建立 launch.json 檔案。

  4. 然後,Python 偵錯程式擴充套件會建立一個並開啟一個 launch.json 檔案,其中包含基於您之前選擇的預定義配置,在本例中為Python 檔案。您可以修改配置(例如,新增引數),也可以新增自定義配置。

    Configuration json

配置屬性的詳細資訊將在本文後面的標準配置和選項中介紹。其他配置也將在本文的除錯特定應用型別中介紹。

其他配置

預設情況下,VS Code 只顯示 Python 偵錯程式擴充套件提供的最常見配置。您可以使用列表中顯示的新增配置命令和 launch.json 編輯器選擇其他配置以包含在 launch.json 中。當您使用該命令時,VS Code 會提示您顯示所有可用配置的列表(請務必選擇 Python 選項)

Adding a new Python debugging configuration

選擇使用程序 ID 附加會產生以下結果:添加了配置

有關所有這些配置的詳細資訊,請參閱除錯特定應用型別

在除錯期間,狀態列顯示當前配置和當前除錯直譯器。選擇配置會彈出一個列表,您可以從中選擇不同的配置

Debugging Status Bar

預設情況下,偵錯程式使用為您的工作區選擇的相同直譯器,就像 VS Code 的 Python 擴充套件的其他功能一樣。要專門為除錯使用不同的直譯器,請在適用除錯配置的 launch.json 中設定 python 的值。或者,使用狀態列上的 Python 直譯器指示器選擇另一個。

基本除錯

如果您只對除錯 Python 指令碼感興趣,最簡單的方法是選擇編輯器上執行按鈕旁邊的向下箭頭,然後選擇 Python 偵錯程式:除錯 Python 檔案

Debug button on the top-right of the editor

如果您希望使用 Flask、Django 或 FastAPI 除錯 Web 應用程式,Python 偵錯程式擴充套件會透過執行和除錯檢視中的顯示所有自動除錯配置選項,根據您的專案結構提供動態建立的除錯配置。

Show all automatic debug configurations option on the run view

但是,如果您希望除錯其他型別的應用程式,可以透過單擊執行和除錯按鈕,透過執行檢視啟動偵錯程式。

Run the debugger

當沒有設定配置時,您將獲得一個除錯選項列表。在這裡,您可以選擇合適的選項來快速除錯您的程式碼。

兩個常見的選項是使用Python 檔案配置來運行當前開啟的 Python 檔案,或者使用使用程序 ID 附加配置將偵錯程式附加到已執行的程序。

有關建立和使用除錯配置的資訊,請參閱初始化配置其他配置部分。新增配置後,可以從下拉列表中選擇它,並使用開始除錯按鈕 (F5) 啟動。

Start debugging button in the Run and Debug view

命令列除錯

如果您的 Python 環境中安裝了 debugpy,也可以從命令列執行偵錯程式。

安裝 debugpy

您可以使用 python -m pip install --upgrade debugpydebugpy 安裝到您的 Python 環境中。

提示:雖然不需要使用虛擬環境,但它是一種推薦的最佳實踐。您可以透過開啟命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 並執行Python:建立虛擬環境命令 () 在 VS Code 中建立虛擬環境。

命令列語法

偵錯程式命令列語法如下

python -m debugpy
    --listen | --connect
    [<host>:]<port>
    [--wait-for-client]
    [--configure-<name> <value>]...
    [--log-to <path>] [--log-to-stderr]
    <filename> | -m <module> | -c <code> | --pid <pid>
    [<arg>]...

示例

從命令列,您可以使用以下語法啟動偵錯程式,指定埠 (5678) 和指令碼。此示例假定指令碼是長期執行的,並省略了 --wait-for-client 標誌,這意味著指令碼不會等待客戶端附加。

python -m debugpy --listen 5678 ./myscript.py

然後,您將使用以下配置從 VS Code Python 偵錯程式擴充套件附加。

{
  "name": "Python Debugger: Attach",
  "type": "debugpy",
  "request": "attach",
  "connect": {
    "host": "localhost",
    "port": 5678
  }
}

注意:對於listen,指定主機是可選的,預設使用 127.0.0.1。

如果您想除錯遠端程式碼或在 Docker 容器中執行的程式碼,則在遠端計算機或容器上,您需要修改之前的 CLI 命令以指定主機。

python -m debugpy --listen 0.0.0.0:5678 ./myscript.py

關聯的配置檔案將如下所示。

{
  "name": "Attach",
  "type": "debugpy",
  "request": "attach",
  "connect": {
    "host": "remote-machine-name", // replace this with remote machine name
    "port": 5678
  }
}

注意:請注意,當您指定除 127.0.0.1localhost 以外的主機值時,您正在開啟一個埠以允許從任何機器進行訪問,這會帶來安全風險。在進行遠端除錯時,您應該確保採取適當的安全預防措施,例如使用 SSH 隧道。

命令列選項

標誌 選項 描述
--listen--connect [<host>:]<port> 必需。指定除錯介面卡伺服器等待傳入連線 (--listen) 或連線等待傳入連線的客戶端 (--connect) 的主機地址和埠。這與 VS Code 除錯配置中使用的地址相同。預設情況下,主機地址為 localhost (127.0.0.1)
--wait-for-client 可選。指定程式碼在除錯伺服器連線之前不應執行。此設定允許您從程式碼的第一行開始除錯。
--log-to <路徑> 可選。指定用於儲存日誌的現有目錄的路徑。
--log-to-stderr 可選。啟用 debugpy 直接將日誌寫入 stderr。
--pid <pid> 可選。指定一個已執行的程序以將除錯伺服器注入其中。
--configure-<name> <值> 可選。設定除錯屬性,該屬性必須在客戶端連線之前為除錯伺服器所知。此類屬性可以直接在啟動配置中使用,但必須以這種方式為附加配置設定。例如,如果您不希望除錯伺服器自動將自身注入到您要附加的程序建立的子程序中,請使用 --configure-subProcess false

注意[<arg>] 可用於將命令列引數傳遞給正在啟動的應用程式。

透過網路連線附加除錯

本地指令碼除錯

在某些情況下,您可能需要除錯由另一個程序在本地呼叫的 Python 指令碼。例如,您可能正在除錯一個為特定處理作業執行不同 Python 指令碼的 Web 伺服器。在這種情況下,您需要將 VS Code 偵錯程式附加到指令碼一旦啟動

  1. 執行 VS Code,開啟包含指令碼的資料夾或工作區,如果尚未存在,則為該工作區建立一個 launch.json

  2. 在指令碼程式碼中,新增以下內容並儲存檔案

    import debugpy
    
    # 5678 is the default attach port in the VS Code debug configurations. Unless a host and port are specified, host defaults to 127.0.0.1
    debugpy.listen(5678)
    print("Waiting for debugger attach")
    debugpy.wait_for_client()
    debugpy.breakpoint()
    print('break on this line')
    
  3. 使用終端:建立新終端開啟一個終端,該終端啟用指令碼的選定環境。

  4. 在終端中,安裝 debugpy 包

  5. 在終端中,使用指令碼啟動 Python,例如 python3 myscript.py。您應該看到程式碼中包含的“等待偵錯程式附加”訊息,指令碼會在 debugpy.wait_for_client() 呼叫處暫停。

  6. 切換到執行和除錯檢視 (⇧⌘D (Windows, Linux Ctrl+Shift+D)),從偵錯程式下拉列表中選擇適當的配置,然後啟動偵錯程式。

  7. 偵錯程式應該會在 debugpy.breakpoint() 呼叫處停止,從那時起您可以正常使用偵錯程式。您還可以選擇使用 UI 而不是 debugpy.breakpoint() 在指令碼程式碼中設定其他斷點。

使用 SSH 進行遠端指令碼除錯

遠端除錯允許您在 VS Code 中本地單步執行程式,同時它在遠端計算機上執行。無需在遠端計算機上安裝 VS Code。為了增加安全性,您可能希望或需要在除錯時使用安全連線(例如 SSH)連線到遠端計算機。

注意:在 Windows 計算機上,您可能需要安裝 Windows 10 OpenSSH 才能使用 ssh 命令。

以下步驟概述了設定 SSH 隧道的通用過程。SSH 隧道允許您在本地計算機上工作,就像您直接在遠端計算機上工作一樣,並且比為公共訪問開啟埠更安全。

在遠端計算機上

  1. 透過開啟 sshd_config 配置檔案(在 Linux 上位於 /etc/ssh/ 下,在 Windows 上位於 %programfiles(x86)%/openssh/etc 下)並新增或修改以下設定來啟用埠轉發

    AllowTcpForwarding yes
    

    注意:AllowTcpForwarding 的預設值為 yes,因此您可能不需要進行更改。

  2. 如果您必須新增或修改 AllowTcpForwarding,請重新啟動 SSH 伺服器。在 Linux/macOS 上,執行 sudo service ssh restart;在 Windows 上,執行 services.msc,在服務列表中選擇 OpenSSH 或 sshd,然後選擇重新啟動

在本地計算機上

  1. 透過執行 ssh -2 -L sourceport:localhost:destinationport -i identityfile user@remoteaddress 建立 SSH 隧道,其中 destinationport 使用選定的埠,user@remoteaddress 中使用適當的使用者名稱和遠端計算機的 IP 地址。例如,要使用 IP 地址 1.2.3.4 上的埠 5678,命令將是 ssh -2 -L 5678:localhost:5678 -i identityfile user@1.2.3.4。您可以使用 -i 標誌指定身份檔案的路徑。

  2. 驗證您是否可以在 SSH 會話中看到提示。

  3. 在您的 VS Code 工作區中,在 launch.json 檔案中為遠端除錯建立配置,將埠設定為與 ssh 命令中使用的埠匹配,並將主機設定為 localhost。您在此處使用 localhost 是因為您已設定 SSH 隧道。

    {
      "name": "Python Debugger: Attach",
      "type": "debugpy",
      "request": "attach",
      "port": 5678,
      "host": "localhost",
      "pathMappings": [
        {
          "localRoot": "${workspaceFolder}", // Maps C:\Users\user1\project1
          "remoteRoot": "." // To current working directory ~/project1
        }
      ]
    }
    

開始除錯

現在已設定好到遠端計算機的 SSH 隧道,您可以開始除錯了。

  1. 兩臺計算機:確保原始碼相同。

  2. 兩臺計算機:安裝 debugpy

  3. 遠端計算機:有兩種方法可以指定如何附加到遠端程序。

    1. 在原始碼中,新增以下行,將 address 替換為遠端計算機的 IP 地址和埠號(此處僅為演示目的顯示 IP 地址 1.2.3.4)。

      import debugpy
      
      # Allow other computers to attach to debugpy at this IP address and port.
      debugpy.listen(('1.2.3.4', 5678))
      
      # Pause the program until a remote debugger is attached
      debugpy.wait_for_client()
      

      listen 中使用的 IP 地址應該是遠端計算機的私有 IP 地址。然後您可以正常啟動程式,使其暫停直到偵錯程式附加。

    2. 透過 debugpy 啟動遠端程序,例如

      python3 -m debugpy --listen 1.2.3.4:5678 --wait-for-client -m myproject
      

      這將使用 python3 啟動包 myproject,遠端計算機的私有 IP 地址為 1.2.3.4,並監聽埠 5678(您還可以透過指定檔案路徑而不是使用 -m 來啟動遠端 Python 程序,例如 ./hello.py)。

  4. 本地計算機:僅當您如上所述修改了遠端計算機上的原始碼時,請在原始碼中新增在遠端計算機上新增的相同程式碼的註釋副本。新增這些行可確保兩臺計算機上的原始碼逐行匹配。

    #import debugpy
    
    # Allow other computers to attach to debugpy at this IP address and port.
    #debugpy.listen(('1.2.3.4', 5678))
    
    # Pause the program until a remote debugger is attached
    #debugpy.wait_for_client()
    
  5. 本地計算機:切換到 VS Code 中的執行和除錯檢視 (⇧⌘D (Windows, Linux Ctrl+Shift+D)),選擇Python 偵錯程式:附加配置

  6. 本地計算機:在您希望開始除錯的程式碼中設定一個斷點。

  7. 本地計算機:使用修改後的Python 偵錯程式:附加配置和“開始除錯”按鈕啟動 VS Code 偵錯程式。VS Code 應該會在您本地設定的斷點處停止,允許您單步執行程式碼、檢查變數並執行所有其他除錯操作。您在除錯控制檯中輸入的表示式也會在遠端計算機上執行。

    標準輸出(例如來自 print 語句)的文字輸出會同時顯示在兩臺計算機上。但是,其他輸出,例如來自 matplotlib 等包的圖形繪圖,僅顯示在遠端計算機上。

  8. 在遠端除錯期間,除錯工具欄如下所示

    Debugging toolbar during remote debugging

    在此工具欄上,斷開連線按鈕 (⇧F5 (Windows, Linux Shift+F5)) 會停止偵錯程式並允許遠端程式執行完成。重新啟動按鈕 (⇧⌘F5 (Windows, Linux Ctrl+Shift+F5)) 會重新啟動本地計算機上的偵錯程式,但不會重新啟動遠端程式。僅當您已重新啟動遠端程式並需要重新附加偵錯程式時才使用重新啟動按鈕。

設定配置選項

當您第一次建立 launch.json 時,有兩個標準配置可以在整合終端(VS Code 內部)或外部終端(VS Code 外部)中執行編輯器中的活動檔案

{
  "configurations": [
    {
      "name": "Python Debugger: Current File (Integrated Terminal)",
      "type": "debugpy",
      "request": "launch",
      "program": "${file}",
      "console": "integratedTerminal"
    },
    {
      "name": "Python Debugger: Current File (External Terminal)",
      "type": "debugpy",
      "request": "launch",
      "program": "${file}",
      "console": "externalTerminal"
    }
  ]
}

具體設定將在以下部分中介紹。您還可以新增其他設定,例如標準配置中未包含的 args

提示:在專案中建立一個執行特定啟動檔案的配置通常很有用。例如,如果您希望在啟動偵錯程式時始終使用引數 --port 1593 啟動 startup.py,請建立如下配置條目

 {
     "name": "Python Debugger: startup.py",
     "type": "debugpy",
     "request": "launch",
     "program": "${workspaceFolder}/startup.py",
     "args" : ["--port", "1593"]
 },

name

提供出現在 VS Code 下拉列表中的除錯配置的名稱。

type

標識要使用的偵錯程式型別;對於除錯 Python 程式碼,將其設定為 debugpy

請求

指定啟動除錯的模式

  • launch:在 program 中指定的檔案上啟動偵錯程式
  • attach:將偵錯程式附加到已執行的程序。有關示例,請參閱遠端除錯

程式

提供 Python 程式入口模組(啟動檔案)的完全限定路徑。${file} 值(通常在預設配置中使用)使用編輯器中當前活動的檔案。透過指定特定的啟動檔案,無論開啟哪些檔案,您都可以始終確保使用相同的入口點啟動程式。例如

"program": "/Users/Me/Projects/MyProject/src/event_handlers/__init__.py",

您還可以依賴工作區根目錄的相對路徑。例如,如果根目錄是 /Users/Me/Projects/MyProject,那麼您可以使用以下示例

"program": "${workspaceFolder}/src/event_handlers/__init__.py",

module

提供指定要除錯的模組名稱的能力,類似於在命令列執行時的 -m 引數。有關更多資訊,請參閱 Python.org

python

指向用於除錯的 Python 直譯器的完整路徑。

如果未指定,此設定預設為為您的工作區選擇的直譯器,這等效於使用值 ${command:python.interpreterPath}。要使用不同的直譯器,請在除錯配置的 python 屬性中指定其路徑。

或者,您可以使用在每個平臺上定義為包含要使用的 Python 直譯器的完整路徑的自定義環境變數,這樣就不需要其他資料夾路徑。

如果您需要將引數傳遞給 Python 直譯器,可以使用 pythonArgs 屬性。

pythonArgs

使用語法 "pythonArgs": ["<arg 1>", "<arg 2>",...] 指定要傳遞給 Python 直譯器的引數。

args

指定要傳遞給 Python 程式的引數。引數字串中由空格分隔的每個元素都應包含在引號中,例如

"args": ["--quiet", "--norepeat", "--port", "1593"],

如果您想為每次除錯執行提供不同的引數,可以將 args 設定為 "${command:pickArgs}"。這將在您每次開始除錯會話時提示您輸入引數。

注意"${command:pickArgs}"["${command:pickArgs}"] 的解析方式存在差異,尤其要注意 [] 的用法。作為陣列,所有引數都作為單個字串傳遞,沒有括號,每個引數都作為其自己的字串傳遞。

stopOnEntry

設定為 true 時,偵錯程式在被除錯程式的首行中斷。如果省略(預設)或設定為 false,偵錯程式將程式執行到第一個斷點。

控制檯

只要未修改 redirectOutput 的預設值,就指定程式輸出的顯示方式。

輸出顯示位置
"internalConsole" VS Code 除錯控制檯。如果 redirectOutput 設定為 False,則不顯示任何輸出。
"integratedTerminal"(預設) VS Code 整合終端。如果 redirectOutput 設定為 True,則輸出也會顯示在除錯控制檯中。
"externalTerminal" 單獨的控制檯視窗。如果 redirectOutput 設定為 True,則輸出也會顯示在除錯控制檯中。

目的

可以使用 purpose 選項配置執行按鈕的方式不止一種。將該選項設定為 debug-test,定義了在 VS Code 中除錯測試時應使用該配置。但是,將該選項設定為 debug-in-terminal,定義了該配置只能在訪問編輯器右上角的執行 Python 檔案按鈕時使用(無論使用按鈕提供的執行 Python 檔案還是除錯 Python 檔案選項)。注意purpose 選項不能用於透過 F5執行 > 開始除錯啟動偵錯程式。

自動重新載入

允許在偵錯程式執行命中斷點後對程式碼進行更改時自動重新載入偵錯程式。要啟用此功能,請將 {"enable": true} 設定為以下程式碼所示。

{
  "name": "Python Debugger: Current File",
  "type": "debugpy",
  "request": "launch",
  "program": "${file}",
  "console": "integratedTerminal",
  "autoReload": {
    "enable": true
  }
}

注意:當偵錯程式執行重新載入時,匯入時執行的程式碼可能會再次執行。為避免這種情況,請嘗試僅在模組中使用匯入、常量和定義,並將所有程式碼放入函式中。或者,您也可以使用 if __name__=="__main__" 檢查。

子程序

指定是否啟用子程序除錯。預設為 false,設定為 true 以啟用。有關更多資訊,請參閱多目標除錯

cwd

指定偵錯程式的當前工作目錄,它是程式碼中使用的任何相對路徑的基資料夾。如果省略,則預設為 ${workspaceFolder}(VS Code 中開啟的資料夾)。

例如,假設 ${workspaceFolder} 包含一個包含 app.pypy_code 資料夾和一個包含 salaries.csvdata 資料夾。如果您在 py_code/app.py 上啟動偵錯程式,則資料檔案的相對路徑會根據 cwd 的值而異

cwd 資料檔案的相對路徑
省略或 ${workspaceFolder} data/salaries.csv
${workspaceFolder}/py_code ../data/salaries.csv
${workspaceFolder}/data salaries.csv

redirectOutput

設定為 true(internalConsole 的預設值)時,會導致偵錯程式將程式的所有輸出列印到 VS Code 除錯輸出視窗。如果設定為 false(integratedTerminal 和 externalTerminal 的預設值),則程式輸出不顯示在偵錯程式輸出視窗中。

當使用 "console": "integratedTerminal""console": "externalTerminal" 時,此選項通常被停用,因為沒有必要在除錯控制檯中重複輸出。

justMyCode

省略或設定為 true(預設值)時,僅將除錯限制為使用者編寫的程式碼。設定為 false 以啟用標準庫函式的除錯。

django

設定為 true 時,啟用特定於 Django Web 框架的除錯功能。

sudo

設定為 true 並與 "console": "externalTerminal" 一起使用時,允許除錯需要提升許可權的應用程式。使用外部控制檯是捕獲密碼所必需的。

金字塔

設定為 true 時,確保 Pyramid 應用程式以必要的 pserve 命令啟動。

env

為偵錯程式程序設定可選環境變數,超出偵錯程式始終繼承的系統環境變數。這些變數的值必須以字串形式輸入。

envFile

包含環境變數定義的可選檔案路徑。請參閱配置 Python 環境 - 環境變數定義檔案

gevent

如果設定為 true,則啟用 gevent monkey-patched 程式碼的除錯。

jinja

設定為 true 時,啟用特定於 Jinja 模板框架的除錯功能。

斷點和日誌點

Python 偵錯程式擴充套件支援斷點日誌點來除錯程式碼。有關基本除錯和使用斷點的簡短演練,請參閱教程 - 配置和執行偵錯程式

條件斷點

斷點也可以設定為根據表示式、命中次數或兩者的組合觸發。Python 偵錯程式擴充套件支援整數命中次數,以及以 ==、>、>=、<、<= 和 % 運算子開頭的整數。例如,您可以透過設定 >5 的命中次數來設定一個斷點,使其在出現五次後觸發。有關更多資訊,請參閱主要 VS Code 除錯文章中的條件斷點

在程式碼中呼叫斷點

在您的 Python 程式碼中,您可以在除錯會話期間希望暫停偵錯程式的任何點呼叫 debugpy.breakpoint()

斷點驗證

Python 偵錯程式擴充套件會自動檢測設定在不可執行行上的斷點,例如 pass 語句或多行語句的中間。在這種情況下,執行偵錯程式會將斷點移動到最近的有效行,以確保程式碼執行在該點停止。

除錯特定應用型別

配置下拉列表為通用應用型別提供了各種不同的選項

配置 描述
附加 請參閱上一節中的遠端除錯
Django 指定 "program": "${workspaceFolder}/manage.py""args": ["runserver"]。還新增 "django": true 以啟用 Django HTML 模板的除錯。
Flask 請參閱下面的Flask 除錯
Gevent "gevent": true 新增到標準整合終端配置。
金字塔 刪除 program,新增 "args": ["${workspaceFolder}/development.ini"],新增 "jinja": true 以啟用模板除錯,並新增 "pyramid": true 以確保程式以必要的 pserve 命令啟動。

遠端除錯和 Google App Engine 也需要特定步驟。有關除錯測試的詳細資訊,請參閱測試

要除錯需要管理員許可權的應用程式,請使用 "console": "externalTerminal""sudo": "True"

Flask 除錯

{
    "name": "Python Debugger: Flask",
    "type": "debugpy",
    "request": "launch",
    "module": "flask",
    "env": {
        "FLASK_APP": "app.py"
    },
    "args": [
        "run",
        "--no-debugger"
    ],
    "jinja": true
},

如您所見,此配置指定了 "env": {"FLASK_APP": "app.py"}"args": ["run", "--no-debugger"]"module": "flask" 屬性代替 program 使用。(您可能會在 env 屬性中看到 "FLASK_APP": "${workspaceFolder}/app.py",在這種情況下,請修改配置以僅引用檔名。否則,您可能會看到“無法匯入模組 C”錯誤,其中 C 是驅動器號。)

"jinja": true 設定還為 Flask 的預設 Jinja 模板引擎啟用除錯。

如果您想在開發模式下執行 Flask 的開發伺服器,請使用以下配置

{
    "name": "Python Debugger: Flask (development mode)",
    "type": "debugpy",
    "request": "launch",
    "module": "flask",
    "env": {
        "FLASK_APP": "app.py",
        "FLASK_ENV": "development"
    },
    "args": [
        "run"
    ],
    "jinja": true
},

故障排除

偵錯程式可能無法工作的原因有很多。有時除錯控制檯會顯示具體原因,但主要原因如下

  • 透過開啟擴充套件檢視 (⇧⌘X (Windows, Linux Ctrl+Shift+X)) 並搜尋 @installed python debugger,確保 Python 偵錯程式擴充套件已安裝並在 VS Code 中啟用。

  • Python 可執行檔案的路徑不正確:透過執行Python:選擇直譯器命令並檢視當前值來檢查所選直譯器的路徑

    Troubleshooting wrong Python interpreter when debugging

  • 您在 launch.json 檔案中將 "type" 設定為已棄用的值 "python":請將其替換為 "debugpy" 以便與 Python 偵錯程式擴充套件一起使用。

  • 監視視窗中存在無效表示式:清除監視視窗中的所有表示式並重新啟動偵錯程式。

  • 如果您正在使用使用本機執行緒 API(例如 Win32 CreateThread 函式而不是 Python 執行緒 API)的多執行緒應用程式,目前需要在您要除錯的任何檔案的頂部包含以下原始碼

    import debugpy
    debugpy.debug_this_thread()
    
  • 如果您正在使用 Linux 系統,嘗試將偵錯程式應用於任何正在執行的程序時可能會收到“timed out”錯誤訊息。為防止這種情況,您可以暫時執行以下命令

    echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
    

後續步驟

  • Python 環境 - 控制用於編輯和除錯的 Python 直譯器。
  • 測試 - 配置測試環境以及發現、執行和除錯測試。
  • 設定參考 - 探索 VS Code 中所有與 Python 相關的設定。
  • 通用除錯 - 瞭解 VS Code 的除錯功能。