在 VS Code 中進行 Python 偵錯

Python 擴充功能透過 Python Debugger 擴充功能支援多種 Python 應用程式類型的偵錯。如需基本偵錯的簡短逐步解說,請參閱教學課程 - 設定並執行偵錯工具。另請參閱 Flask 教學課程。這兩個教學課程都示範了核心技能,例如設定中斷點和逐步執行程式碼。

關於一般偵錯功能,例如檢查變數、設定中斷點以及其他與語言無關的操作,請參閱 VS Code 偵錯

本文主要探討 Python 專屬的偵錯設定,包括特定應用程式類型所需的步驟以及遠端偵錯。

Python Debugger 擴充功能

Python Debugger 擴充功能會隨 VS Code 的 Python 擴充功能自動安裝。它透過 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.

您可以參閱擴充功能的 README 頁面,以了解支援的版本資訊。

初始化設定

設定會驅動 VS Code 在偵錯工作階段期間的行為。設定定義在儲存於工作區 .vscode 資料夾中的 launch.json 檔案內。

注意:若要變更偵錯設定,您的程式碼必須儲存在資料夾中。

若要初始化偵錯設定,請先選取側邊欄中的執行檢視

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 debugpydebugpy 安裝到您的 Python 環境中。

提示

雖然不強制要求使用虛擬環境,但這是建議的最佳做法。您可以透過開啟命令選擇區 (⇧⌘P (Windows、Linux 為 Ctrl+Shift+P)) 並執行 Python: Create 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.1localhost 以外的主機值時,您會開啟一個連接埠以允許來自任何機器的存取,這會帶來安全性風險。進行遠端偵錯時,您應確保採取適當的安全預防措施,例如使用 SSH 通道。

命令列選項

旗標 選項 說明
--listen--connect [<host>:]<port> 必要。指定主機位址與連接埠,供偵錯介面卡伺服器等待連入連線 (--listen),或連線至正在等待連入連線的用戶端 (--connect)。這與 VS Code 偵錯設定中所使用的位址相同。根據預設,主機位址為 localhost (127.0.0.1)
--wait-for-client none 選用。指定程式碼在收到來自偵錯伺服器的連線之前不應執行。此設定允許您從程式碼的第一行開始偵錯。
--log-to <path> 選用。指定用於儲存記錄的現有目錄路徑。
--log-to-stderr none 選用。允許 debugpy 直接將記錄寫入 stderr。
--pid <pid> 選用。指定要將偵錯伺服器植入其中且已經在執行的處理程序。
--configure-<name> <value> 選用。設定在用戶端連線之前,偵錯伺服器必須知道的偵錯屬性。此類屬性可以直接在 launch 設定中使用,但對於 attach 設定,必須以這種方式設定。例如,如果您不希望偵錯伺服器自動把自己植入您所附加之處理程序所建立的子處理程序中,請使用 --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 啟動 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 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 下拉式清單中的偵錯設定名稱。

類型

識別要使用的偵錯工具類型;若要偵錯 Python 程式碼,請保持此項設定為 debugpy

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

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

引數

指定要傳遞給 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} 包含一個含有 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" 一起使用時,允許對需要提升權限的應用程式進行偵錯。使用外部主控台是擷取密碼所必需的。

pyramid

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

環境變數

為偵錯工具處理程序設定超出系統環境變數 (偵錯工具一律會繼承系統環境變數) 的選用環境變數。這些變數的值必須以字串輸入。

環境檔案

包含環境變數定義之檔案的選用路徑。請參閱設定 Python 環境 - 環境變數定義檔案

gevent

如果設為 true,則會啟用 gevent 猴子修補 (monkey-patched) 程式碼的偵錯。

jinja

當設為 true 時,會啟動 Jinja 範本架構專屬的偵錯功能。

中斷點與記錄點

Python Debugger 擴充功能支援用於偵錯程式碼的中斷點記錄點。如需基本偵錯與使用中斷點的簡短逐步解說,請參閱教學課程 - 設定並執行偵錯工具

條件式中斷點

也可以設定中斷點根據運算式、命中計數 (hit count) 或兩者的組合來觸發。除了前面加上 ==、>、>=、<、<= 和 % 運算子的整數外,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",在這種情況下,請修改設定以僅參考檔名。否則,您可能會看到 "Cannot import module 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":請改用 "debugpy" 取代 "python",以便與 Python Debugger 擴充功能搭配運作。

  • 監看視窗中有無效的運算式:清除監看視窗中的所有運算式並重新啟動偵錯工具。

  • 如果您正在處理使用原生執行緒 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 的偵錯功能。
English 한국어 中文(简体) 中文(繁體)
© . This website operates independently and is not affiliated with or endorsed by Microsoft. All brand names, logos, and trademarks are the property of their respective owners.