現已釋出!閱讀關於 11 月新增功能和修復的內容。

VS Code 中的 Python 除錯

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

有關通用的除錯功能,如檢查變數、設定斷點以及其他與語言無關的操作,請參閱 VS Code 除錯

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

Python Debugger 擴充套件

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

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

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

有關支援的 Python 版本的資訊,您可以參考該擴充套件的 README 頁面。

初始化配置

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

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

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

Run icon

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

Debug toolbar settings command

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

  1. 選擇 **建立 launch.json 檔案** 連結(在上圖中標出)或使用 **執行** > **開啟配置** 選單命令。

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

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

    List of Python debugger configuration options

    注意:透過除錯面板、F5 或 **執行 > 啟動除錯** 開始除錯會話(當不存在配置時)也會開啟除錯配置選單,但不會建立 `launch.json` 檔案。

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

    Configuration json

配置屬性的詳細資訊將在本文的 標準配置和選項 部分進行介紹。其他配置也在此文章的 除錯特定應用型別 部分進行描述。

附加配置

預設情況下,VS Code 只顯示 Python Debugger 擴充套件提供的最常見配置。您可以透過在列表和 `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 Debugger: Debug Python File**。

Debug button on the top-right of the editor

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

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 debugpy` 在您的 Python 環境中安裝 debugpy

提示:雖然使用虛擬環境不是必需的,但這是推薦的最佳實踐。您可以透過開啟命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 並執行 **Python: Create Virtual Environment** 命令 () 來在 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 Debugger 擴充套件附加。

{
  "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.1` 或 `localhost` 時,您將開啟一個埠以允許任何機器訪問,這會帶來安全風險。您應該確保採取適當的安全措施,例如使用 SSH 隧道,在進行遠端除錯時。

命令列選項

標誌 選項 描述
--listen--connect [<host>:]<port> 必需。指定除錯介面卡伺服器等待傳入連線(--listen)或連線正在等待傳入連線的客戶端(--connect)的主機地址和埠。這與 VS Code 除錯配置中使用的地址相同。預設情況下,主機地址是 `localhost (127.0.0.1)`。
--wait-for-client 可選。指定在有除錯伺服器的連線之前,程式碼不應執行。此設定允許您從程式碼的第一行開始除錯。
--log-to <path> 可選。指定一個現有目錄的路徑來儲存日誌。
--log-to-stderr 可選。啟用 debugpy 直接向 stderr 寫入日誌。
--pid <pid> 可選。指定一個已執行的程序以將除錯伺服器注入其中。
--configure-<name> <value> 可選。設定一個在客戶端連線之前除錯伺服器必須知道的除錯屬性。這些屬性可以直接在啟動配置中使用,但必須以這種方式為附加配置設定。例如,如果您不希望除錯伺服器自動將自身注入到您正在附加的程序建立的子程序中,請使用 ` --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`。您應該會看到程式碼中包含的“Waiting for debugger attach”訊息,並且指令碼會在 `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` 和遠端計算機的私有 IP 地址 `1.2.3.4` 啟動包 `myproject`,並在埠 `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 Debugger: Attach** 配置

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

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

    輸出到 stdout 的文字(例如 `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

標識要使用的偵錯程式型別;將此設定為 `debugpy` 以除錯 Python 程式碼。

request

指定啟動除錯的模式

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

program

提供 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

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

args

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

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

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

注意:`"${command:pickArgs}"` 和 `["${command:pickArgs}"]` 的解析方式不同,特別注意 `[]` 的使用。作為陣列時,所有引數都作為單個字串傳遞;沒有括號時,每個引數都作為自己的字串傳遞。

stopOnEntry

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

console

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

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

purpose

有多種方法可以配置 **執行** 按鈕,使用 `purpose` 選項。將選項設定為 `debug-test`,表示配置應用於在 VS Code 中除錯測試。然而,將選項設定為 `debug-in-terminal`,表示配置僅在訪問編輯器右上角的 **執行 Python 檔案** 按鈕時使用(無論該按鈕提供的 **執行 Python 檔案** 還是 **除錯 Python 檔案** 選項如何)。注意:`purpose` 選項不能用於透過 F5 或 **執行 > 啟動除錯** 來啟動偵錯程式。

autoReload

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

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

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

subProcess

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

cwd

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

例如,假設 `${workspaceFolder}` 包含一個 `py_code` 資料夾,其中包含 `app.py`,以及一個 `data` 資料夾,其中包含 `salaries.csv`。如果您在 `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"` 一起使用時,允許除錯需要提升許可權的應用。使用外部控制檯以捕獲密碼是必需的。

pyramid

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

env

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

envFile

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

gevent

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

jinja

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

斷點和日誌點

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

條件斷點

斷點還可以設定為基於表示式、命中次數或兩者的組合來觸發。Python Debugger 擴充套件支援整數命中次數,以及前面帶有 ==, >, >=, <, <= 和 % 運算子的整數。例如,您可以將命中次數設定為 `>5` 來設定一個在五次後觸發的斷點。有關更多資訊,請參閱主 VS Code 除錯文章中的 條件斷點

在程式碼中呼叫斷點

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

斷點驗證

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

除錯特定應用型別

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

配置 描述
附加 請參閱上一節的 遠端除錯
Django 指定 `"program": "${workspaceFolder}/manage.py"`,`"args": ["runserver"]`。還添加了 `"django": true` 以啟用 Django HTML 模板的除錯。
Flask 請參閱下面的 Flask 除錯
Gevent 將 `"gevent": true` 新增到標準的整合終端配置中。
Pyramid 刪除 `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 Debugger 擴充套件 已在 VS Code 中安裝並啟用。

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

    Troubleshooting wrong Python interpreter when debugging

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

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

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

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

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

後續步驟

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