用VScode代碼調試Python

Python擴展支持許多類型的Python應用程序的調試,包括如下通常功能:

  • 觀看窗口
  • 評估表達式
  • 當地人
  • 參數
  • 擴大孩子
  • 斷點
  • 條件斷點
  • 暫停(進入)正在運行的程序
  • 自定義啓動目錄

要熟悉這些常規功能,請查看VS Code調試文章。本文僅討論那些特定於Python的注意事項。html

選擇一個配置

要選擇調試配置,請選擇邊欄中的調試視圖,而後從下拉列表中選擇一個選項:python

選擇調試配置

在調試時,狀態欄顯示左下角的當前配置,當前的調試解釋器位於右側。選擇配置會顯示列表,您能夠從中選擇不一樣的配置:linux

調試狀態欄

默認狀況下,調試器使用與python.pythonPathVS Code其餘功能相同的設置。要使用不一樣的解釋器,請pythonPath在調試器設置中設置該值。或者,在狀態欄上選擇指定的解釋器以選擇不一樣的解釋器。git

注:調試器設置不支持相對路徑,包括依賴主python.pythonPath設置時。要解決此問題,請使用環境變量,或者建立一個變量,例如${workspaceFolder}解析到您的項目文件夾,而後在該路徑中使用該變量,如in "python.pythonPath": "${workspaceFolder}/venv/bin/python"github

要查看全部配置,請launch.json經過選擇配置下拉列表旁邊的齒輪圖標打開:golang

調試設置圖標

下一節將介紹默認或標準的「Python:當前文件」配置。本文還介紹了調試特定應用程序類型下的其餘配置。正則表達式

注意:若是您想嘗試新的實驗性調試器,請參閱Issue 538(GitHub)上的說明。shell

標準配置和選項

標準配置爲launch.json編程

{
    "name": "Python: Current File",
    "type": "python",
    "request": "launch",
    "program": "${file}",
}

如下各節介紹各類設置的自定義配置。json

name

提供出如今VS Code下拉列表中的調試配置的名稱。

type

標識要使用的調試器的類型; 將此設置留給pythonPython代碼。

request

指定開始調試的模式:

  • launch:在中指定的文件上啓動調試器 program
  • attach:將調試器附加到已經運行的進程。有關示例,請參閱遠程調試

program

提供python程序入口模塊的徹底限定路徑。推薦值爲${file},它使用編輯器中的活動文件。可是,對於具備多個文件的程序,您能夠指定程序的啓動文件。例如:

"program": "/Users/Me/Projects/PokemonGo-Bot/pokemongo_bot/event_handlers/__init__.py",

您還能夠依賴工做區根目錄中的相對路徑。例如,若是根是/Users/Me/Projects/PokemonGo-Bot那麼你可使用如下內容:

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

pythonPath

指向Python解釋器用於調試目的。若是未指定,則默認爲python.pythonPath設置中標識的解釋器,這至關於使用該值${config:python.pythonPath}。要使用不一樣的解釋器,請改成指定其路徑。

您能夠經過將指定特定於平臺的路徑pythonPath命名的父對象中osxwindows或者linux。例如,PySpark的配置使用如下值:

"osx": {
    "pythonPath": "^\"\\${env:SPARK_HOME}/bin/spark-submit\""
},
"windows": {
    "pythonPath": "^\"\\${env:SPARK_HOME}/bin/spark-submit.cmd\""
},
"linux": {
    "pythonPath": "^\"\\${env:SPARK_HOME}/bin/spark-submit\""
},

args

指定傳遞給Python程序的參數,例如:

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

stopOnEntry

設置爲true時,在調試程序的第一行中斷開調試器。若是省略(默認)或設置爲false,則調試器將程序運行到第一個斷點。

console

指定如何顯示程序輸出。

顯示輸出的地方
"none" VS代碼調試控制檯
"integratedTerminal" (默認) VS代碼集成終端
"externalTerminal" 獨立控制檯窗口

cwd

指定調試器的當前工做目錄,它是代碼中使用的任何相對路徑的基礎文件夾。若是省略,默認爲${workspaceFolder}(在VS代碼中打開的文件夾)。

做爲一個例子,說${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

debugOptions

一系列可能包含如下內容的附加選項:

選項 描述
"RedirectOutput"(默認) 使調試器將程序的全部輸出打印到VS Code調試輸出窗口中。若是省略此設置,則全部程序輸出不顯示在調試器輸出窗口中。該選項在使用時一般會被省略,"console": "integratedTerminal"或者"console": "externalTerminal"由於不須要在調試控制檯中複製輸出。
"DebugStdLib" 啓用標準庫函數的調試。
"Django" 激活特定於Django Web框架的調試功能。
"Sudo" 與...一塊兒使用時"console": "externalTerminal",容許調試須要提高的應用程序。捕獲密碼須要使用外部控制檯。
"Pyramid" 在調試金字塔應用程序時使用。

env

爲除調試器始終繼承的系統環境變量以外的調試器進程設置可選的環境變量。

envFile

包含環境變量定義的文件的可選路徑。請參閱配置Python環境 - 環境變量定義文件

調試特定的應用程序類型

配置下拉菜單爲常規應用程序類型提供了各類不一樣的選項:

組態 描述
PySpark 使用PySpark而不是默認解釋器運行程序,使用pythonPath前面在pythonPath選項下顯示的特定於平臺的值。
Python模塊 替換program設置"module": "module.name"以調試特定模塊。使用此配置時,請將該值替換爲所需的模塊名稱。
集成終端/控制檯 "console": "integratedTerminal"選項添加到標準配置。
外部終端/控制檯 "console": "externalTerminal"選項添加到標準配置。
Django的 指定"program": "${workspaceFolder}/manage.py""args": ["runserver", "--noreload", "--nothreading"]添加「Django」和「RedirectOutput」 debugOptions。請注意,在調試時不能自動從新加載Django應用程序。要調試Django HTML模板,請添加斷點templates
燒瓶 請參閱下面的Flask調試
金字塔 刪除program,添加"args": ["${workspaceFolder}/development.ini"]並添加「金字塔」和「重定向輸出」 debugOptions
沃森 指定"program": "${workspaceFolder}/console.py""args": ["dev", "runserver", "--noreload=True"]
Scrapy 指定"program": "~/.virtualenvs/scrapy/bin/scrapy",添加"console": "integratedTerminal"選項並添加"args": ["crawl", "specs", "-o", "bikes.json"]
附加(遠程調試) 請參閱如下遠程調試

遠程調試和Google App Engine還須要具體步驟。有關調試單元測試(包括nosetest)的詳細信息,請參閱單元測試

要調試須要管理員權限的應用程序,請在中使用"console": "externalTerminal"幷包含「Sudo」 debugOptions

燒瓶調試

{
    "name": "Flask",
    "type": "python",
    "request": "launch",
    "stopOnEntry": false,
    "pythonPath": "${config:python.pythonPath}",
    "module": "flask",
    "cwd": "${workspaceFolder}",
    "env": {
        "FLASK_APP": "${workspaceFolder}/app.py"
    },
    "args": [
        "run",
        "--no-debugger",
        "--no-reload"
    ]
},

正如你所看到的,這個配置指定"stopOnEntry": false"env": {"FLASK_APP": "${workspaceFolder}/app.py"}"args": ["run", "--no-debugger","--no-reload"]。該"module": "flask"屬性被用來代替program

遠程調試

遠程調試容許您在VS代碼本地執行一個程序,同時在遠程計算機上執行它。在這種狀況下,必須在兩臺計算機上都有源代碼。

  1. 在開發和遠程計算機上,安裝ptvsd 3.0.03.0.0 徹底版本- 更高版本尚不支持#514)。

  2. 在兩臺計算機的源代碼中,添加如下行,用適當的密碼替換my_secret以驗證遠程調試,並用合適的IP地址(或)和端口號替換地址localhost

    import ptvsd
    ptvsd.enable_attach("my_secret", address = ('0.0.0.0', 3000))
    
    # Enable the line of source code below only if you want the application to wait until the debugger has attached to it
    #ptvsd.wait_for_attach()
  3. 僅在遠程計算機上,取消註釋上面的最後一行。您但願在開發機器上保留註釋行,以確保兩臺機器上的源代碼與行符合。

  4. 啓動遠程程序。

  5. 選擇附加(遠程調試)(下面)配置,而後修改remoteRoot爲指向該程序的遠程計算機上的位置,並修改hostport以及secret在上面添加的源代碼中的值匹配。

    {
        "name": "Attach (Remote Debug)",
        "type": "python",
        "request": "attach",
        "localRoot": "${workspaceFolder}",
        "remoteRoot": "${workspaceFolder}",
        "port": 3000,
        "secret": "my_secret",
        "host": "localhost"
    }

經過SSH進行調試

視窗:

  1. 使用sshd_config或相似命令在遠程計算機上啓用ssh端口轉發。
  2. 創建一個PuTTY SSH隧道:
    1. 閱讀使用PuTTY設置SSH隧道(直到「打開會話」部分)。
    2. 在「隧道」屏幕上,使用本地模式,源端口(本地計算機上的入口點端口)可能與目標端口(服務器上的端點)不一樣。
    3. 目標地址應該是本地主機或127.0.0.1地址(這是遠程SSH服務器用於創建隧道的地址)。

Linux的:

  1. 跑 ssh -L sourceport:localhost:destinationport user@remoteaddress

接下來,驗證您能夠在SSH會話中看到提示。而後打開VS Code並將端口配置爲顯示在Tunnels屏幕上的調試端口。

最後,啓動程序並按照上一節所述附加調試器。

Google App Engine調試

Google App Engine本身啓動一個應用程序,所以在VS Code調試器中啓動它不是直接可能的。相反,咱們須要在應用中使用ptvsd,而後以容許VS Code附加其調試器的模式啓動Google App Engine。

調試Google App Engine

  1. 下載ptvsd並將其文件壓縮到工做文件夾中的ptvsd文件夾中。(若是使用不一樣的文件夾,請修改pydev_startup.py步驟4中建立的文件中的路徑)。

  2. tasks.json使用如下內容建立一個文件:

    {
        "version": "2.0.0",
        "tasks": [
            {
                "label": "Launch Google App Engine",
                "command": "python",
                "type": "shell",
                "args": [
                    "/usr/local/google_appengine/dev_appserver.py",
                    "--python_startup_script=${workspaceFolder}/pydev_startup.py",
                    "--automatic_restart=no",
                    "--max_module_instances=default:1",
                    "${workspaceFolder}/app.yaml"
                ]
            }
        ]
    }
  3. 在Windows和Linux上,將第一項內容替換args爲安裝Google App Engine的路徑(上面的源代碼中顯示的路徑適用於MacOS)。

  4. 在您的項目根目錄下建立一個名爲pydev_startup.py的文件,其中包含如下內容,並按照說明修改:

    import sys
    import os
    
    #Assuming that pdvsd is located in the working folder
    sys.path.append(os.getcwd())
    
    import ptvsd
    # Modify the secret and port number as desired; you're debugging locally so the values don't matter.
    # However, be sure the port is not blocked on your computer.
    ptvsd.enable_attach(secret = 'gae', address = ('0.0.0.0', 3000))
    
    #The debug server has started and you can now use VS Code to attach to the application for debugging
    print("Google App Engine has started, ready to attach the debugger")
  5. launch.json使用Attach(遠程調試)配置做爲模板建立配置。確保祕密和端口值與上面源代碼中的內容匹配。

  6. 添加"preLaunchTask": "python"launch.json

  7. 從命令面板中,運行「 運行構建任務」命令。這將打開任務輸出窗口,您能夠在其中看到各類消息。

  8. 一旦看到消息「Google App Engine已啓動,準備好鏈接調試器」,請使用遠程調試配置啓動VS Code調試器。

  9. 在須要的地方設置斷點,而後啓動瀏覽器以啓動應用程序。

 

故障排除

調試器可能沒法正常工做的緣由不少。調試控制檯常常會顯示具體緣由,但有兩個具體緣由以下:

  • python可執行文件的路徑不正確:請檢查pythonPath用戶設置中的值。

  • 觀察窗口中的表達式無效(請參閱下面的示例):清除Watch窗口中的全部表達式並從新啓動調試器。

    Traceback (most recent call last):
      File ".../visualstudio_py_debugger.py", line 1646, in loop
        cmd()
      File ".../visualstudio_py_debugger.py", line 1918, in command_execute_code
        thread.run_on_thread(text, cur_frame, eid, frame_kind, repr_kind)
      File ".../visualstudio_py_debugger.py", line 1246, in run_on_thread
        self.schedule_work(lambda : self.run_locally(text, cur_frame, execution_id, frame_kind, repr_kind))
      File ".../visualstudio_py_debugger.py", line 1238, in schedule_work
        self.unblock()
      File ".../visualstudio_py_debugger.py", line 1234, in unblock
        self._block_lock.release()
    RuntimeError: release unlocked lock

下一步


Python與數據挖掘__張良均著.pdf: https://itdocs.pipipan.com/fs/3843664-288859126
Python基礎教程(第3版.pdf: https://itdocs.pipipan.com/fs/3843664-288859043
Python學習手冊(第4版).pdf: https://itdocs.pipipan.com/fs/3843664-288859052
Python開發技術詳解-視頻教程.iso: https://itdocs.pipipan.com/fs/3843664-288864486
python絕技:運用python成爲頂級黑客.pdf: https://itdocs.pipipan.com/fs/3843664-288859062
《python開發技術詳解》.(周偉,宗傑).pdf: https://itdocs.pipipan.com/fs/3843664-288859058
《精通Python設計模式》源代碼文件.zip: https://itdocs.pipipan.com/fs/3843664-288859061
用Python作科學計算.pdf: https://itdocs.pipipan.com/fs/3843664-288859067
用Python寫網絡爬蟲.pdf: https://itdocs.pipipan.com/fs/3843664-288859070
精通Python設計模式 高清晰PDF.pdf: https://itdocs.pipipan.com/fs/3843664-288859111
蔣鑫Git權威指南帶書籤完整版.pdf: https://itdocs.pipipan.com/fs/3843664-288859076
Python核心編程(第3版)PDF高清晰完整中文版: https://itdocs.pipipan.com/dir/3843664-28077740-78f7a6/
Python網絡數據採集: https://itdocs.pipipan.com/dir/3843664-28077743-675289/
Python爬蟲開發與項目實戰: https://itdocs.pipipan.com/dir/3843664-28077746-2b41ac/
Python網絡編程第三版清晰帶源代碼: https://itdocs.pipipan.com/dir/3843664-28077749-d118f0/
beginning-python-3ed-master: https://itdocs.pipipan.com/dir/3843664-28077752-a37a35/
Python網絡爬蟲實戰: https://itdocs.pipipan.com/dir/3843664-28077755-8be101/
python能夠這樣學: https://itdocs.pipipan.com/dir/3843664-28077758-66613a/
python數據分析完整高清版+筆記+隨書源碼: https://itdocs.pipipan.com/dir/3843664-28077761-3bf2c9/
《精通Python設計模式》源代碼文件: https://itdocs.pipipan.com/dir/3843664-28077764-cd04ea/
精通Python網絡爬蟲 核心技術、框架與項目實戰: https://itdocs.pipipan.com/dir/3843664-28077767-48c194/
精通正則表達式 第三版本 帶書籤: https://itdocs.pipipan.com/dir/3843664-28077770-e48997/
Python灰帽子 黑客與逆向工程師的Python編程之道+中文+英文+代碼Code: https://itdocs.pipipan.com/dir/3843664-28128478-d57d64/

 

 
 
posted @ 2018-05-10 23:50 中國人醒來了 閱讀(7275) 評論(0) 編輯 收藏
相關文章
相關標籤/搜索